openapi: 3.0.3
info:
title: 'Ruhline API API Documentation'
description: 'Ruhline API — authentication and role-based access for customers, admins, staff, and coaches, plus public catalogs, checkout, enrollments, reviews, disputes, and payouts.'
version: 1.0.0
servers:
-
url: 'https://ruhline-api.test'
tags:
-
name: 'Customer Authentication'
description: "\nAPIs for customer authentication, registration, and password management."
-
name: 'Admin Authentication'
description: "\nAPIs for admin and staff authentication. Both admin and staff users can access the admin portal."
-
name: 'Coach Authentication'
description: "\nAPIs for coach authentication. Coaches can register, verify email, and log in.\nAdmin must verify a coach before they can log in (coaches created by admin are verified by default)."
-
name: 'Checkout (Customer)'
description: "\nAPIs for checkout preview and Stripe Checkout Session payment.\n\nBase path: /api/v1/checkout"
-
name: 'Customer - Enrollments'
description: ''
-
name: 'Customer - Disputes'
description: ''
-
name: 'Customer - Program Reviews'
description: ''
-
name: 'Programs (Guest / no auth)'
description: "\nUnauthenticated catalog: list programs and program detail. Only programs whose category is active are returned.\nDoes not include program structure or modules.\n\nBase path: /api/v1/programs"
-
name: 'Coaches (Guest / no auth)'
description: "\nUnauthenticated directory of admin-verified coaches only.\n\nBase path: /api/v1/coaches"
-
name: 'Coach - Programs'
description: "\nAPIs for coaches to view programs they are assigned to.\n\nRoutes are prefixed with: /api/v1/program"
-
name: 'Coach - Program Availability'
description: "\nAPIs for coaches to manage their own availability and time-off per assigned program.\n\nRoutes are prefixed with: /api/v1/program"
-
name: 'Coach - Program Structure'
description: ''
-
name: 'Coach - Disputes'
description: ''
-
name: 'Coach - Payouts'
description: ''
-
name: 'Admin - About Page (CMS)'
description: "\nAPIs for managing the About page content (Section 01, Mission/Vision/Values, Founder).\nOnly accessible by admin users.\n\nAll routes are prefixed with: /api/v1/admin/about-page"
-
name: 'About Page (Public)'
description: "\nPublic API for retrieving the About page content for the frontend.\nNo authentication required.\n\nRoutes are prefixed with: /api/v1/about-page"
-
name: 'Admin - Article Category Management'
description: "\nAPIs for managing article categories. Only accessible by admin users.\nAdmin sends is_active as text \"true\" or \"false\".\n\nAll routes are prefixed with: /api/v1/admin/article-category"
-
name: 'Admin - Article Management'
description: "\nAPIs for managing articles (with thumbnail, category, description, share options, sections).\nAdmin sends share_facebook, share_twitter, share_linkedin as text \"true\" or \"false\".\nSection image_position: left, right, or center.\n\nAll routes are prefixed with: /api/v1/admin/article"
-
name: 'Article Categories (Public)'
description: "\nPublic APIs for listing article categories. No authentication required.\nReturns only active categories with articles count.\n\nAll routes are prefixed with: /api/v1/article-category"
-
name: 'Articles (Public)'
description: "\nPublic APIs for listing and viewing articles. No authentication required.\nAll routes are prefixed with: /api/v1/article/article (list, single by id)."
-
name: 'Admin - Card Management'
description: "\nAPIs for managing cards within card categories. Only accessible by admin users.\nEach category has up to 52 cards. Admin provides card name and description when creating.\n\nAll routes are prefixed with: /api/v1/admin/card-category/cards"
-
name: 'Admin - Card Category Management'
description: "\nAPIs for managing card categories. Only accessible by admin users.\nAdmin provides only the card category name when creating.\n\nAll routes are prefixed with: /api/v1/admin/card-category"
-
name: 'Admin - Checkout Orders'
description: ''
-
name: 'Admin - Coach Management'
description: "\nAPIs for managing coaches. Only accessible by admin users.\n\nAll routes are prefixed with: /api/v1/coach/admin"
-
name: 'Admin - Global Commission Rate (Coaches)'
description: "\nAPIs for managing the global commission rate applied to coaches.\nOnly accessible by admin users.\n\nAll routes are prefixed with: /api/v1/admin/coach"
-
name: 'Admin - Contact Form Management'
description: "\nAPIs for managing contact form submissions. Only accessible by admin users.\n\nAll routes are prefixed with: /api/v1/admin/contact"
-
name: 'Contact Form'
description: "\nPublic APIs for submitting contact form. No authentication required."
-
name: 'Admin - Coupon Management'
description: "\nAPIs for managing coupons. Only accessible by admin users.\n\nAll routes are prefixed with: /api/v1/admin/coupon"
-
name: 'Admin - Customer Management'
description: "\nAPIs for managing customers. Only accessible by admin users.\n\nAll routes are prefixed with: /api/v1/admin/customer"
-
name: 'Admin - Disputes'
description: ''
-
name: 'Admin - FAQ Management'
description: "\nAPIs for managing FAQs for mentee and mentor pages.\nOnly accessible by admin users.\n\nAll routes are prefixed with: /api/v1/admin/faq"
-
name: 'FAQ (Public)'
description: "\nPublic APIs for retrieving FAQs for mentee and mentor pages.\nNo authentication required.\n\nRoutes are prefixed with: /api/v1/faq"
-
name: 'Admin - Goal Type Management'
description: "\nAPIs for managing goal types. Admin enters only the Goal Type Name.\nOnly accessible by admin users.\n\nAll routes are prefixed with: /api/v1/admin/goal-type"
-
name: 'Admin - Habit Type Management'
description: "\nAPIs for managing habit types. Admin enters only the Habit Type Name.\nOnly accessible by admin users.\n\nAll routes are prefixed with: /api/v1/admin/habit-type"
-
name: 'Admin - Home Page (CMS)'
description: "\nAPIs for managing the Home page content (Hero, About Us, Programs, Why Choose Us, Coaches, Articles).\nOnly accessible by admin users.\n\nAll routes are prefixed with: /api/v1/admin/home-page"
-
name: 'Home Page (Public)'
description: "\nPublic API for retrieving the Home page content for the frontend.\nNo authentication required.\n\nRoutes are prefixed with: /api/v1/home-page"
-
name: 'Admin - Values Intermediate Page (Intermediate Steps)'
description: "\nAPIs for managing the Values Intermediate Page content (headline and points).\nOnly accessible by admin users.\n\nAll routes are prefixed with: /api/v1/admin/intermediate-steps/values"
-
name: 'Admin - The Y Method Page (Intermediate Steps)'
description: "\nAPIs for managing The Y Method Page content (headline and steps).\nOnly accessible by admin users.\n\nAll routes are prefixed with: /api/v1/admin/intermediate-steps/y-method"
-
name: 'Admin - Eight most common mistakes Intermediate Page'
description: "\nAPIs for managing the Eight most common mistakes page (headline and mistakes).\nOnly accessible by admin users.\n\nAll routes are prefixed with: /api/v1/admin/intermediate-steps/eight-most-common-mistakes"
-
name: 'Admin - Goal Settings Intermediate Page'
description: "\nAPIs for managing the Goal Settings Intermediate Page (headline, quote, sub-headings, description 2, options).\nOnly accessible by admin users.\n\nAll routes are prefixed with: /api/v1/admin/intermediate-steps/goal-settings"
-
name: 'Admin - Questions for each goal - why? Intermediate Page'
description: "\nAPIs for managing the Questions for each goal - why? page (headlines, question blocks, quote).\nOnly accessible by admin users.\n\nAll routes are prefixed with: /api/v1/admin/intermediate-steps/questions-goal-why"
-
name: 'Intermediate Steps - Values Page (Public)'
description: "\nPublic API for retrieving the Values Intermediate Page content.\n\nRoutes are prefixed with: /api/v1/intermediate-steps"
-
name: 'Intermediate Steps - The Y Method Page (Public)'
description: "\nPublic API for retrieving The Y Method Page content.\n\nRoutes are prefixed with: /api/v1/intermediate-steps"
-
name: 'Intermediate Steps - Eight most common mistakes (Public)'
description: "\nPublic API for retrieving the Eight most common mistakes page content.\n\nRoutes are prefixed with: /api/v1/intermediate-steps"
-
name: 'Intermediate Steps - Goal Settings (Public)'
description: "\nPublic API for retrieving the Goal Settings Intermediate Page content."
-
name: 'Intermediate Steps - Questions for each goal - why? (Public)'
description: "\nPublic API for retrieving the Questions for each goal - why? page content."
-
name: 'Admin - Legal Pages (CMS)'
description: "\nAPIs for managing legal pages (privacy policy, refund policy, terms & conditions).\nOnly accessible by admin users.\n\nAll routes are prefixed with: /api/v1/admin/legal-page"
-
name: 'Legal Pages (Public)'
description: "\nPublic APIs for retrieving legal page content (privacy policy, refund policy, terms & conditions).\nNo authentication required.\n\nRoutes are prefixed with: /api/v1/legal-page"
-
name: Location
description: "\nAPIs for retrieving location data including countries, states, cities, and phone country codes."
-
name: 'Admin - Program Category Management'
description: "\nAPIs for managing program categories and sub-categories. Only accessible by admin users.\n\nAll routes are prefixed with: /api/v1/admin/program-category"
-
name: 'Program Categories (Public)'
description: "\nPublic APIs for listing program categories and sub-categories. No authentication required.\nReturns only active categories. Use parent_id filter or nested=1 for tree.\n\nAll routes are prefixed with: /api/v1/program-category"
-
name: 'Admin - Program Management'
description: "\nAPIs for managing programs. Only accessible by admin users.\n\nAll routes are prefixed with: /api/v1/admin/program"
-
name: 'Admin - Program Reviews'
description: ''
-
name: 'Admin - Program Settings'
description: "\nAPIs for managing program settings (Quote Category and Card Category per program).\nUsed to select which quote category and card category are used for this program (e.g. for future quotes and cards modules).\n\nRoutes: /api/v1/admin/program/{id}/settings"
-
name: 'Admin - Program Structure'
description: "\nAPIs for managing program structure (ordered modules) and module content.\nRoutes: /api/v1/admin/program/{id}/structure"
-
name: 'Admin - Payouts'
description: ''
-
name: 'Admin - Quote Management'
description: "\nAPIs for managing quotes within quote categories. Only accessible by admin users.\nEach category has unlimited quotes. Admin provides quote text when creating.\n\nAll routes are prefixed with: /api/v1/admin/quote-category/quotes"
-
name: 'Admin - Quote Category Management'
description: "\nAPIs for managing quote categories. Only accessible by admin users.\nAdmin provides only the quote category name when creating.\n\nAll routes are prefixed with: /api/v1/admin/quote-category"
-
name: 'Admin - Shift Management'
description: "\nAPIs for managing shifts (name, start time, end time) for working days.\nBy default a shift is applied to all working days. Only accessible by admin users.\n\nAll routes are prefixed with: /api/v1/admin/shift\n\nDay of week: 0=Sunday, 1=Monday, ..., 6=Saturday"
-
name: 'Shifts (Public)'
description: "\nPublic API for reading shifts. No authentication required.\n\nAll routes are prefixed with: /api/v1/shift\n\nDay of week: 0=Sunday, 1=Monday, ..., 6=Saturday"
-
name: 'Admin - Site Settings (CMS)'
description: "\nAPIs for managing site settings. Only accessible by admin users.\n\nAll routes are prefixed with: /api/v1/admin/site-setting"
-
name: 'Site Settings (Public)'
description: "\nPublic APIs for retrieving site settings (logos, footer, social links, address).\nNo authentication required.\n\nRoutes are prefixed with: /api/v1/site-setting"
-
name: 'Admin - Working Days Management'
description: "\nAPIs for managing which week days are working days. Only accessible by admin users.\n\nAll routes are prefixed with: /api/v1/admin/working-day\n\nDay of week: 0=Sunday, 1=Monday, 2=Tuesday, 3=Wednesday, 4=Thursday, 5=Friday, 6=Saturday"
-
name: 'Working Days (Public)'
description: "\nPublic API for reading which week days are working days and their shifts. No authentication required.\n\nAll routes are prefixed with: /api/v1/working-day\n\nDay of week: 0=Sunday, 1=Monday, 2=Tuesday, 3=Wednesday, 4=Thursday, 5=Friday, 6=Saturday"
-
name: 'Example Routes'
description: "\nExample routes demonstrating role-based access control. These are sample endpoints showing how different user roles can access different resources.\n\n"
-
name: 'Coach - Enrollment Module Access'
description: ''
-
name: 'Customer - Enrollment Card Game'
description: ''
-
name: 'Customer - Enrollment Find Your Motivation'
description: ''
-
name: 'Customer - Enrollment Goal Settings'
description: ''
-
name: 'Customer - Enrollment Habit Tracker'
description: ''
-
name: 'Customer - Enrollment Modules'
description: ''
-
name: 'Customer - Enrollment Questions'
description: ''
-
name: 'Customer - Enrollment Upload Documents'
description: ''
-
name: 'Customer - Enrollment Wheel Of Life'
description: ''
-
name: Endpoints
description: ''
components:
securitySchemes:
default:
type: http
scheme: bearer
description: 'You can retrieve your token by logging in through the authentication endpoints. Include the token in the Authorization header as: Bearer {your-token-here}'
security:
-
default: []
paths:
/api/v1/auth/customer/register:
post:
summary: 'Register a new customer'
operationId: registerANewCustomer
description: "Register a new customer account. After registration, a verification email will be sent to the provided email address.\nThe customer must verify their email before they can log in."
parameters: []
responses:
201:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Customer registered successfully. Please check your email to verify your account.'
data:
user:
id: 1
name: 'John Doe'
first_name: John
last_name: Doe
email: john.doe@example.com
email_verified_at: null
roles:
- customer
message: 'Registration successful. Please verify your email address before logging in.'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Customer registered successfully. Please check your email to verify your account.'
data:
type: object
properties:
user:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'John Doe'
first_name:
type: string
example: John
last_name:
type: string
example: Doe
email:
type: string
example: john.doe@example.com
email_verified_at:
type: string
example: null
nullable: true
roles:
type: array
example:
- customer
items:
type: string
message:
type: string
example: 'Registration successful. Please verify your email address before logging in.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
email:
- 'This email address is already registered.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
email:
type: array
example:
- 'This email address is already registered.'
items:
type: string
tags:
- 'Customer Authentication'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
first_name:
type: string
description: "The customer's first name."
example: John
last_name:
type: string
description: "The customer's last name."
example: Doe
email:
type: string
description: "The customer's email address. Must be unique."
example: john.doe@example.com
password:
type: string
description: "The customer's password. Must be at least 8 characters."
example: password123
terms_accepted:
type: boolean
description: 'Must be true to accept terms and conditions.'
example: true
password_confirmation:
type: string
description: 'Password confirmation. Must match password.'
example: password123
required:
- first_name
- last_name
- email
- password
- terms_accepted
- password_confirmation
security: []
/api/v1/auth/customer/login:
post:
summary: 'Login customer'
operationId: loginCustomer
description: 'Authenticate a customer and return an access token. The customer must have verified their email address before logging in.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Login successful'
data:
user:
id: 1
name: 'John Doe'
first_name: John
last_name: Doe
email: john.doe@example.com
email_verified_at: '2025-01-20T17:25:00+00:00'
roles:
- customer
profile:
phone: '1234567890'
phone_country_code:
id: 1
phone_code: '+1'
intl_dialing_prefix: '1'
address_line_1: '123 Main Street'
address_line_2: 'Apt 4B'
landmark: 'Near Central Park'
country:
id: 1
name: 'United States'
state:
id: 1
name: 'New York'
city:
id: 1
name: 'New York City'
postal_code: '12345'
profile_image: 'http://example.com/storage/customer-profiles/image.jpg'
token: 1|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Login successful'
data:
type: object
properties:
user:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'John Doe'
first_name:
type: string
example: John
last_name:
type: string
example: Doe
email:
type: string
example: john.doe@example.com
email_verified_at:
type: string
example: '2025-01-20T17:25:00+00:00'
roles:
type: array
example:
- customer
items:
type: string
profile:
type: object
properties:
phone:
type: string
example: '1234567890'
phone_country_code:
type: object
properties:
id:
type: integer
example: 1
phone_code:
type: string
example: '+1'
intl_dialing_prefix:
type: string
example: '1'
address_line_1:
type: string
example: '123 Main Street'
address_line_2:
type: string
example: 'Apt 4B'
landmark:
type: string
example: 'Near Central Park'
country:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'United States'
state:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'New York'
city:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'New York City'
postal_code:
type: string
example: '12345'
profile_image:
type: string
example: 'http://example.com/storage/customer-profiles/image.jpg'
token:
type: string
example: 1|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Please verify your email address before logging in. Check your inbox for the verification link.'
errors:
email:
- 'Please verify your email address before logging in. Check your inbox for the verification link.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Please verify your email address before logging in. Check your inbox for the verification link.'
errors:
type: object
properties:
email:
type: array
example:
- 'Please verify your email address before logging in. Check your inbox for the verification link.'
items:
type: string
tags:
- 'Customer Authentication'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
email:
type: string
description: "The customer's email address."
example: john.doe@example.com
password:
type: string
description: "The customer's password."
example: password123
required:
- email
- password
security: []
/api/v1/auth/customer/forgot-password:
post:
summary: 'Forgot password'
operationId: forgotPassword
description: "Send a password reset link to the customer's email address. The link will be sent to the frontend URL configured in the system."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'If a customer account exists with that email, we have sent a password reset link.'
data:
message: 'If a customer account exists with that email, we have sent a password reset link.'
frontend_url: 'http://localhost:3000'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'If a customer account exists with that email, we have sent a password reset link.'
data:
type: object
properties:
message:
type: string
example: 'If a customer account exists with that email, we have sent a password reset link.'
frontend_url:
type: string
example: 'http://localhost:3000'
tags:
- 'Customer Authentication'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
email:
type: string
description: "The customer's email address."
example: john.doe@example.com
required:
- email
security: []
/api/v1/auth/customer/reset-password:
post:
summary: 'Reset password'
operationId: resetPassword
description: "Reset the customer's password using the token received in the password reset email."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Password has been reset successfully. You can now login with your new password.'
data:
message: 'Password has been reset successfully. You can now login with your new password.'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Password has been reset successfully. You can now login with your new password.'
data:
type: object
properties:
message:
type: string
example: 'Password has been reset successfully. You can now login with your new password.'
400:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Invalid or expired reset token.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Invalid or expired reset token.'
tags:
- 'Customer Authentication'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
token:
type: string
description: 'The password reset token from the email.'
example: abc123...
email:
type: string
description: "The customer's email address."
example: john.doe@example.com
password:
type: string
description: 'The new password. Must be at least 8 characters.'
example: newpassword123
password_confirmation:
type: string
description: 'Password confirmation. Must match password.'
example: newpassword123
required:
- token
- email
- password
- password_confirmation
security: []
/api/v1/auth/customer/email/verify:
post:
summary: 'Verify email address (POST)'
operationId: verifyEmailAddressPOST
description: "Verify a customer's email address using the verification parameters from the email link.\nThis endpoint is designed for frontend applications to call after extracting parameters from the verification URL."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Email verified successfully. You can now log in.'
data:
user:
id: 1
name: 'John Doe'
email: john.doe@example.com
email_verified_at: '2025-01-20T17:25:00+00:00'
roles:
- customer
already_verified: false
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Email verified successfully. You can now log in.'
data:
type: object
properties:
user:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'John Doe'
email:
type: string
example: john.doe@example.com
email_verified_at:
type: string
example: '2025-01-20T17:25:00+00:00'
roles:
type: array
example:
- customer
items:
type: string
already_verified:
type: boolean
example: false
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Invalid or expired verification link.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Invalid or expired verification link.'
tags:
- 'Customer Authentication'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
id:
type: integer
description: 'The user ID from the verification link.'
example: 1
hash:
type: string
description: 'The verification hash from the email link.'
example: abc123...
expires:
type: integer
description: 'The expiration timestamp from the verification link.'
example: 1234567890
signature:
type: string
description: 'The signature from the verification link.'
example: xyz789...
required:
- id
- hash
- expires
- signature
security: []
'/api/v1/auth/customer/email/verify/{id}/{hash}':
get:
summary: 'Verify email address (GET)'
operationId: verifyEmailAddressGET
description: "Verify a customer's email address via direct link access. This endpoint is used when clicking the verification link directly."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Email verified successfully. You can now log in.'
data:
user:
id: 1
name: 'John Doe'
email: john.doe@example.com
email_verified_at: '2025-01-20T17:25:00+00:00'
roles:
- customer
already_verified: false
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Email verified successfully. You can now log in.'
data:
type: object
properties:
user:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'John Doe'
email:
type: string
example: john.doe@example.com
email_verified_at:
type: string
example: '2025-01-20T17:25:00+00:00'
roles:
type: array
example:
- customer
items:
type: string
already_verified:
type: boolean
example: false
tags:
- 'Customer Authentication'
security: []
parameters:
-
in: path
name: id
description: 'The user ID.'
example: 1
required: true
schema:
type: integer
-
in: path
name: hash
description: 'The verification hash.'
example: abc123...
required: true
schema:
type: string
/api/v1/auth/customer/email/resend-verification:
post:
summary: 'Resend email verification'
operationId: resendEmailVerification
description: "Resend the email verification link to the customer's email address. This is a public endpoint that accepts an email address."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'If a customer account exists with that email, we have sent a verification email.'
data:
message: 'If a customer account exists with that email, we have sent a verification email.'
frontend_url: 'http://localhost:3000'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'If a customer account exists with that email, we have sent a verification email.'
data:
type: object
properties:
message:
type: string
example: 'If a customer account exists with that email, we have sent a verification email.'
frontend_url:
type: string
example: 'http://localhost:3000'
400:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Email already verified.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Email already verified.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
email:
- 'We could not find a user with that email address.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
email:
type: array
example:
- 'We could not find a user with that email address.'
items:
type: string
tags:
- 'Customer Authentication'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
email:
type: string
description: "The customer's email address."
example: john.doe@example.com
required:
- email
security: []
/api/v1/auth/customer/logout:
post:
summary: 'Logout customer'
operationId: logoutCustomer
description: 'Revoke the current access token and log out the authenticated customer.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Logged out successfully'
data: []
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Logged out successfully'
data:
type: array
example: []
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Customer Authentication'
/api/v1/auth/customer/me:
get:
summary: 'Get customer profile'
operationId: getCustomerProfile
description: "Get the authenticated customer's profile information."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Profile retrieved successfully'
data:
user:
id: 1
name: 'John Doe'
first_name: John
last_name: Doe
email: john.doe@example.com
email_verified_at: '2025-01-20T17:25:00+00:00'
roles:
- customer
profile:
phone: '1234567890'
phone_country_code:
id: 1
phone_code: '+1'
address_line_1: '123 Main Street'
address_line_2: 'Apt 4B'
landmark: 'Near Central Park'
country:
id: 1
name: 'United States'
state:
id: 1
name: 'New York'
city:
id: 1
name: 'New York City'
postal_code: '12345'
profile_image: 'http://example.com/storage/profiles/image.jpg'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Profile retrieved successfully'
data:
type: object
properties:
user:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'John Doe'
first_name:
type: string
example: John
last_name:
type: string
example: Doe
email:
type: string
example: john.doe@example.com
email_verified_at:
type: string
example: '2025-01-20T17:25:00+00:00'
roles:
type: array
example:
- customer
items:
type: string
profile:
type: object
properties:
phone:
type: string
example: '1234567890'
phone_country_code:
type: object
properties:
id:
type: integer
example: 1
phone_code:
type: string
example: '+1'
address_line_1:
type: string
example: '123 Main Street'
address_line_2:
type: string
example: 'Apt 4B'
landmark:
type: string
example: 'Near Central Park'
country:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'United States'
state:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'New York'
city:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'New York City'
postal_code:
type: string
example: '12345'
profile_image:
type: string
example: 'http://example.com/storage/profiles/image.jpg'
tags:
- 'Customer Authentication'
/api/v1/auth/customer/change-password:
post:
summary: 'Change password'
operationId: changePassword
description: "Change the authenticated customer's password. The customer must provide their current password for verification."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Password changed successfully'
data:
message: 'Your password has been changed successfully.'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Password changed successfully'
data:
type: object
properties:
message:
type: string
example: 'Your password has been changed successfully.'
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
current_password:
- 'The current password is incorrect.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
current_password:
type: array
example:
- 'The current password is incorrect.'
items:
type: string
tags:
- 'Customer Authentication'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
current_password:
type: string
description: "The customer's current password."
example: oldpassword123
password:
type: string
description: 'The new password. Must be at least 8 characters.'
example: newpassword123
password_confirmation:
type: string
description: 'Password confirmation. Must match password.'
example: newpassword123
required:
- current_password
- password
- password_confirmation
/api/v1/auth/customer/update-profile:
post:
summary: 'Update customer profile'
operationId: updateCustomerProfile
description: "Update the authenticated customer's profile information including personal details, contact information, address, and profile image."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Profile updated successfully'
data:
user:
id: 1
name: 'John Doe'
first_name: John
last_name: Doe
email: john.doe@example.com
email_verified_at: '2025-01-20T17:25:00+00:00'
roles:
- customer
profile:
phone: '1234567890'
phone_country_code:
id: 1
phone_code: '+1'
address_line_1: '123 Main Street'
address_line_2: 'Apt 4B'
landmark: 'Near Central Park'
country:
id: 1
name: 'United States'
state:
id: 1
name: 'New York'
city:
id: 1
name: 'New York City'
postal_code: '12345'
profile_image: 'http://example.com/storage/profiles/image.jpg'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Profile updated successfully'
data:
type: object
properties:
user:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'John Doe'
first_name:
type: string
example: John
last_name:
type: string
example: Doe
email:
type: string
example: john.doe@example.com
email_verified_at:
type: string
example: '2025-01-20T17:25:00+00:00'
roles:
type: array
example:
- customer
items:
type: string
profile:
type: object
properties:
phone:
type: string
example: '1234567890'
phone_country_code:
type: object
properties:
id:
type: integer
example: 1
phone_code:
type: string
example: '+1'
address_line_1:
type: string
example: '123 Main Street'
address_line_2:
type: string
example: 'Apt 4B'
landmark:
type: string
example: 'Near Central Park'
country:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'United States'
state:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'New York'
city:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'New York City'
postal_code:
type: string
example: '12345'
profile_image:
type: string
example: 'http://example.com/storage/profiles/image.jpg'
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
email:
- 'This email address is already registered.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
email:
type: array
example:
- 'This email address is already registered.'
items:
type: string
tags:
- 'Customer Authentication'
requestBody:
required: false
content:
multipart/form-data:
schema:
type: object
properties:
first_name:
type: string
description: "The customer's first name."
example: John
last_name:
type: string
description: "The customer's last name."
example: Doe
email:
type: string
description: "The customer's email address. Must be unique."
example: john.doe@example.com
phone:
type: string
description: "The customer's phone number."
example: '1234567890'
phone_country_code_id:
type: integer
description: 'The ID of the phone country code.'
example: 1
nullable: true
address_line_1:
type: string
description: "The customer's primary address line."
example: '123 Main Street'
nullable: true
address_line_2:
type: string
description: "The customer's secondary address line."
example: 'Apt 4B'
nullable: true
landmark:
type: string
description: 'A nearby landmark.'
example: 'Near Central Park'
nullable: true
country_id:
type: integer
description: 'The ID of the country.'
example: 1
nullable: true
state_id:
type: integer
description: 'The ID of the state.'
example: 1
nullable: true
city_id:
type: integer
description: 'The ID of the city.'
example: 1
nullable: true
postal_code:
type: string
description: 'The postal or zip code.'
example: '12345'
nullable: true
profile_image:
type: string
format: binary
description: "The customer's profile image. Must be an image file (jpeg, png, jpg, gif) and not exceed 2MB."
nullable: true
/api/v1/admin/profile:
get:
summary: 'Get admin/staff profile data'
operationId: getAdminstaffProfileData
description: "Get the authenticated admin or staff user's detailed profile data including first name, last name, email, profile photo and extra data."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Admin profile retrieved successfully'
data:
id: 1
user_id: 1
first_name: John
last_name: Doe
email: admin@ruhline.com
profile_photo: 'http://example.com/storage/profiles/photo.jpg'
extra_data: null
created_at: '2026-01-20T17:47:05+00:00'
updated_at: '2026-01-20T17:47:05+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Admin profile retrieved successfully'
data:
type: object
properties:
id:
type: integer
example: 1
user_id:
type: integer
example: 1
first_name:
type: string
example: John
last_name:
type: string
example: Doe
email:
type: string
example: admin@ruhline.com
profile_photo:
type: string
example: 'http://example.com/storage/profiles/photo.jpg'
extra_data:
type: string
example: null
nullable: true
created_at:
type: string
example: '2026-01-20T17:47:05+00:00'
updated_at:
type: string
example: '2026-01-20T17:47:05+00:00'
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Admin profile not found'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Admin profile not found'
tags:
- 'Admin Authentication'
put:
summary: 'Update profile'
operationId: updateProfile
description: "Update the authenticated admin or staff user's profile information including first name, last name, and profile photo."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Profile updated successfully'
data:
user:
id: 1
name: 'John Doe'
first_name: John
last_name: Doe
email: admin@ruhline.com
email_verified_at: null
roles:
- admin
profile:
profile_photo: 'http://example.com/storage/profiles/photo.jpg'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Profile updated successfully'
data:
type: object
properties:
user:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'John Doe'
first_name:
type: string
example: John
last_name:
type: string
example: Doe
email:
type: string
example: admin@ruhline.com
email_verified_at:
type: string
example: null
nullable: true
roles:
type: array
example:
- admin
items:
type: string
profile:
type: object
properties:
profile_photo:
type: string
example: 'http://example.com/storage/profiles/photo.jpg'
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
profile_photo:
- 'The profile photo must be an image.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
profile_photo:
type: array
example:
- 'The profile photo must be an image.'
items:
type: string
tags:
- 'Admin Authentication'
requestBody:
required: false
content:
multipart/form-data:
schema:
type: object
properties:
first_name:
type: string
description: 'The admin/staff first name.'
example: John
last_name:
type: string
description: 'The admin/staff last name.'
example: Doe
profile_photo:
type: string
format: binary
description: 'The admin/staff profile photo. Must be an image file (jpeg, png, jpg, gif) and not exceed 2MB.'
/api/v1/auth/admin/login:
post:
summary: 'Login admin or staff'
operationId: loginAdminOrStaff
description: 'Authenticate an admin or staff user and return an access token. Both admin and staff roles can use this endpoint.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Login successful'
data:
user:
id: 1
name: 'Admin User'
first_name: Admin
last_name: User
email: admin@ruhline.com
email_verified_at: null
roles:
- admin
profile:
profile_photo: 'http://example.com/storage/profiles/photo.jpg'
token: 1|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Login successful'
data:
type: object
properties:
user:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'Admin User'
first_name:
type: string
example: Admin
last_name:
type: string
example: User
email:
type: string
example: admin@ruhline.com
email_verified_at:
type: string
example: null
nullable: true
roles:
type: array
example:
- admin
items:
type: string
profile:
type: object
properties:
profile_photo:
type: string
example: 'http://example.com/storage/profiles/photo.jpg'
token:
type: string
example: 1|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'This account is not authorized to access the admin portal.'
errors:
email:
- 'This account is not authorized to access the admin portal.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'This account is not authorized to access the admin portal.'
errors:
type: object
properties:
email:
type: array
example:
- 'This account is not authorized to access the admin portal.'
items:
type: string
tags:
- 'Admin Authentication'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
email:
type: string
description: 'The admin/staff email address.'
example: admin@ruhline.com
password:
type: string
description: 'The admin/staff password.'
example: password
required:
- email
- password
security: []
/api/v1/auth/admin/logout:
post:
summary: 'Logout admin/staff'
operationId: logoutAdminstaff
description: 'Revoke the current access token and log out the authenticated admin or staff user.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Logged out successfully'
data: []
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Logged out successfully'
data:
type: array
example: []
tags:
- 'Admin Authentication'
/api/v1/auth/admin/me:
get:
summary: 'Get admin/staff profile'
operationId: getAdminstaffProfile
description: "Get the authenticated admin or staff user's profile information."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Profile retrieved successfully'
data:
user:
id: 1
name: 'Admin User'
email: admin@ruhline.com
email_verified_at: null
roles:
- admin
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Profile retrieved successfully'
data:
type: object
properties:
user:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'Admin User'
email:
type: string
example: admin@ruhline.com
email_verified_at:
type: string
example: null
nullable: true
roles:
type: array
example:
- admin
items:
type: string
tags:
- 'Admin Authentication'
/api/v1/auth/admin/change-password:
post:
summary: 'Change password'
operationId: changePassword
description: "Change the authenticated admin or staff user's password. The user must provide their current password for verification."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Password changed successfully'
data:
message: 'Your password has been changed successfully.'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Password changed successfully'
data:
type: object
properties:
message:
type: string
example: 'Your password has been changed successfully.'
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
current_password:
- 'The current password is incorrect.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
current_password:
type: array
example:
- 'The current password is incorrect.'
items:
type: string
tags:
- 'Admin Authentication'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
current_password:
type: string
description: 'The admin/staff current password.'
example: oldpassword123
password:
type: string
description: 'The new password. Must be at least 8 characters.'
example: newpassword123
password_confirmation:
type: string
description: 'Password confirmation. Must match password.'
example: newpassword123
required:
- current_password
- password
- password_confirmation
/api/v1/auth/admin/profile:
get:
summary: 'Get admin/staff profile data'
operationId: getAdminstaffProfileData
description: "Get the authenticated admin or staff user's detailed profile data including first name, last name, email, profile photo and extra data."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Admin profile retrieved successfully'
data:
id: 1
user_id: 1
first_name: John
last_name: Doe
email: admin@ruhline.com
profile_photo: 'http://example.com/storage/profiles/photo.jpg'
extra_data: null
created_at: '2026-01-20T17:47:05+00:00'
updated_at: '2026-01-20T17:47:05+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Admin profile retrieved successfully'
data:
type: object
properties:
id:
type: integer
example: 1
user_id:
type: integer
example: 1
first_name:
type: string
example: John
last_name:
type: string
example: Doe
email:
type: string
example: admin@ruhline.com
profile_photo:
type: string
example: 'http://example.com/storage/profiles/photo.jpg'
extra_data:
type: string
example: null
nullable: true
created_at:
type: string
example: '2026-01-20T17:47:05+00:00'
updated_at:
type: string
example: '2026-01-20T17:47:05+00:00'
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Admin profile not found'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Admin profile not found'
tags:
- 'Admin Authentication'
put:
summary: 'Update profile'
operationId: updateProfile
description: "Update the authenticated admin or staff user's profile information including first name, last name, and profile photo."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Profile updated successfully'
data:
user:
id: 1
name: 'John Doe'
first_name: John
last_name: Doe
email: admin@ruhline.com
email_verified_at: null
roles:
- admin
profile:
profile_photo: 'http://example.com/storage/profiles/photo.jpg'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Profile updated successfully'
data:
type: object
properties:
user:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'John Doe'
first_name:
type: string
example: John
last_name:
type: string
example: Doe
email:
type: string
example: admin@ruhline.com
email_verified_at:
type: string
example: null
nullable: true
roles:
type: array
example:
- admin
items:
type: string
profile:
type: object
properties:
profile_photo:
type: string
example: 'http://example.com/storage/profiles/photo.jpg'
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
profile_photo:
- 'The profile photo must be an image.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
profile_photo:
type: array
example:
- 'The profile photo must be an image.'
items:
type: string
tags:
- 'Admin Authentication'
requestBody:
required: false
content:
multipart/form-data:
schema:
type: object
properties:
first_name:
type: string
description: 'The admin/staff first name.'
example: John
last_name:
type: string
description: 'The admin/staff last name.'
example: Doe
profile_photo:
type: string
format: binary
description: 'The admin/staff profile photo. Must be an image file (jpeg, png, jpg, gif) and not exceed 2MB.'
/api/v1/auth/coach/register:
post:
summary: 'Register a new coach'
operationId: registerANewCoach
description: "Register a new coach account. After registration, a verification email is sent.\nThe coach must verify their email, and an admin must verify the coach, before they can log in."
parameters: []
responses:
201:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Coach registered successfully. Please check your email to verify your account.'
data:
user:
id: 1
name: 'John Doe'
email: coach@example.com
email_verified_at: null
roles:
- coach
message: 'Registration successful. Please verify your email. An admin must approve your account before you can log in.'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Coach registered successfully. Please check your email to verify your account.'
data:
type: object
properties:
user:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'John Doe'
email:
type: string
example: coach@example.com
email_verified_at:
type: string
example: null
nullable: true
roles:
type: array
example:
- coach
items:
type: string
message:
type: string
example: 'Registration successful. Please verify your email. An admin must approve your account before you can log in.'
tags:
- 'Coach Authentication'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
first_name:
type: string
description: "The coach's first name."
example: John
last_name:
type: string
description: "The coach's last name."
example: Doe
email:
type: string
description: "The coach's email address. Must be unique."
example: coach@example.com
password:
type: string
description: "The coach's password. Must be at least 8 characters."
example: password123
password_confirmation:
type: string
description: 'Password confirmation.'
example: password123
required:
- first_name
- last_name
- email
- password
- password_confirmation
security: []
/api/v1/auth/coach/login:
post:
summary: 'Login coach'
operationId: loginCoach
description: "Authenticate a coach and return an access token. The coach must have verified their email\nand be verified by an admin before they can log in."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Login successful'
data:
user:
id: 1
name: 'Coach User'
email: coach@ruhline.com
roles:
- coach
token: 1|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Login successful'
data:
type: object
properties:
user:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'Coach User'
email:
type: string
example: coach@ruhline.com
roles:
type: array
example:
- coach
items:
type: string
token:
type: string
example: 1|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'This account is not authorized to access the coach portal.'
errors:
email:
- 'This account is not authorized to access the coach portal.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'This account is not authorized to access the coach portal.'
errors:
type: object
properties:
email:
type: array
example:
- 'This account is not authorized to access the coach portal.'
items:
type: string
tags:
- 'Coach Authentication'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
email:
type: string
description: 'The coach email address.'
example: coach@ruhline.com
password:
type: string
description: 'The coach password.'
example: password
required:
- email
- password
security: []
/api/v1/auth/coach/forgot-password:
post:
summary: 'Forgot password (coach)'
operationId: forgotPasswordcoach
description: ''
parameters: []
responses: { }
tags:
- 'Coach Authentication'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
email:
type: string
description: "The customer's email address. Must be a valid email address. The email of an existing record in the users table."
example: john.doe@example.com
required:
- email
security: []
/api/v1/auth/coach/reset-password:
post:
summary: 'Reset password (coach)'
operationId: resetPasswordcoach
description: ''
parameters: []
responses: { }
tags:
- 'Coach Authentication'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
token:
type: string
description: 'The password reset token from the email.'
example: abc123...
email:
type: string
description: "The customer's email address. Must be a valid email address. The email of an existing record in the users table."
example: john.doe@example.com
password:
type: string
description: 'The new password. Must be at least 8 characters.'
example: newpassword123
required:
- token
- email
- password
security: []
/api/v1/auth/coach/email/verify:
post:
summary: 'Verify coach email (POST)'
operationId: verifyCoachEmailPOST
description: ''
parameters: []
responses: { }
tags:
- 'Coach Authentication'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
id:
type: integer
description: 'The user ID from the verification link. The id of an existing record in the users table.'
example: 1
hash:
type: string
description: 'The verification hash from the email link.'
example: abc123...
expires:
type: integer
description: 'The expiration timestamp from the verification link.'
example: 1234567890
signature:
type: string
description: 'The signature from the verification link.'
example: xyz789...
required:
- id
- hash
- expires
- signature
security: []
'/api/v1/auth/coach/email/verify/{id}/{hash}':
get:
summary: 'Verify coach email (GET)'
operationId: verifyCoachEmailGET
description: ''
parameters: []
responses:
403:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Invalid signature.'
properties:
message:
type: string
example: 'Invalid signature.'
tags:
- 'Coach Authentication'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the verify.'
example: architecto
required: true
schema:
type: string
-
in: path
name: hash
description: ''
example: architecto
required: true
schema:
type: string
/api/v1/auth/coach/email/resend-verification:
post:
summary: 'Resend coach email verification'
operationId: resendCoachEmailVerification
description: ''
parameters: []
responses: { }
tags:
- 'Coach Authentication'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
email:
type: string
description: "The customer's email address. Must be a valid email address. The email of an existing record in the users table."
example: john.doe@example.com
required:
- email
security: []
/api/v1/auth/coach/logout:
post:
summary: 'Logout coach'
operationId: logoutCoach
description: 'Revoke the current access token and log out the authenticated coach user.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Logged out successfully'
data: []
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Logged out successfully'
data:
type: array
example: []
tags:
- 'Coach Authentication'
/api/v1/auth/coach/me:
get:
summary: 'Get coach profile'
operationId: getCoachProfile
description: "Get the authenticated coach user's profile information."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Profile retrieved successfully'
data:
user:
id: 1
name: 'Coach User'
email: coach@ruhline.com
email_verified_at: null
roles:
- coach
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Profile retrieved successfully'
data:
type: object
properties:
user:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'Coach User'
email:
type: string
example: coach@ruhline.com
email_verified_at:
type: string
example: null
nullable: true
roles:
type: array
example:
- coach
items:
type: string
tags:
- 'Coach Authentication'
/api/v1/auth/coach/change-password:
post:
summary: 'Change password'
operationId: changePassword
description: "Change the authenticated coach's password. The coach must provide their current password for verification."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Password changed successfully'
data:
message: 'Your password has been changed successfully.'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Password changed successfully'
data:
type: object
properties:
message:
type: string
example: 'Your password has been changed successfully.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'The given data was invalid.'
errors:
current_password:
- 'The current password is incorrect.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'The given data was invalid.'
errors:
type: object
properties:
current_password:
type: array
example:
- 'The current password is incorrect.'
items:
type: string
tags:
- 'Coach Authentication'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
current_password:
type: string
description: "The coach's current password."
example: oldpassword123
password:
type: string
description: 'The new password. Must be at least 8 characters.'
example: newpassword123
password_confirmation:
type: string
description: 'Password confirmation. Must match password.'
example: newpassword123
required:
- current_password
- password
- password_confirmation
/api/v1/auth/coach/update-profile:
post:
summary: 'Update coach profile'
operationId: updateCoachProfile
description: "Update the authenticated coach's profile. All fields are optional; only provided fields are updated.\nSupports: first_name, last_name, email, phone, phone_country_code_id, coach_type, address fields, profile_image."
parameters: []
responses:
200:
description: ''
content:
text/plain:
schema:
type: string
example: "{\n \"success\": true,\n \"message\": \"Profile updated successfully\",\n \"data\": { \"user\": { \"id\": 1, \"name\": \"John Doe\", \"email\": \"coach@example.com\", \"profile\": { ... } } }\n}"
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
422:
description: ''
content:
text/plain:
schema:
type: string
example: '{ "success": false, "message": "Validation failed", "errors": { ... } }'
tags:
- 'Coach Authentication'
requestBody:
required: false
content:
multipart/form-data:
schema:
type: object
properties:
first_name:
type: string
description: "Optional. The coach's first name."
example: John
last_name:
type: string
description: "Optional. The coach's last name."
example: Doe
email:
type: string
description: "Optional. The coach's email. Must be unique."
example: coach@example.com
phone:
type: string
description: 'Optional. Phone number.'
example: '1234567890'
nullable: true
phone_country_code_id:
type: integer
description: 'Optional. ID of phone country code.'
example: 1
nullable: true
coach_type:
type: string
description: 'Optional. One of: Mentor, Yoga Trainer.'
example: Mentor
nullable: true
address_line_1:
type: string
description: 'Optional. Primary address line.'
example: '123 Main St'
nullable: true
address_line_2:
type: string
description: 'Optional. Secondary address line.'
example: 'Apt 4B'
nullable: true
landmark:
type: string
description: 'Optional. Landmark.'
example: 'Near Central Park'
nullable: true
country_id:
type: integer
description: 'Optional. Country ID.'
example: 1
nullable: true
state_id:
type: integer
description: 'Optional. State ID.'
example: 1
nullable: true
city_id:
type: integer
description: 'Optional. City ID.'
example: 1
nullable: true
postal_code:
type: string
description: 'Optional. Postal code.'
example: '12345'
nullable: true
profile_image:
type: string
format: binary
description: 'Optional. Profile image (jpeg, png, jpg, gif, max 2MB).'
nullable: true
/api/v1/auth/coach/payment-details:
get:
summary: 'Get coach payment details.'
operationId: getCoachPaymentDetails
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Coach Authentication'
put:
summary: 'Update coach payment details.'
operationId: updateCoachPaymentDetails
description: ''
parameters: []
responses: { }
tags:
- 'Coach Authentication'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
account_number:
type: string
description: 'Auto-generated from validation rules for `account_number`. Must not be greater than 100 characters.'
example: b
country:
type: string
description: 'Auto-generated from validation rules for `country`. Must not be greater than 100 characters.'
example: 'n'
bank_name:
type: string
description: 'Auto-generated from validation rules for `bank_name`. Must not be greater than 255 characters.'
example: g
account_holder_name:
type: string
description: 'Auto-generated from validation rules for `account_holder_name`. Must not be greater than 255 characters.'
example: z
swiss_code:
type: string
description: 'Auto-generated from validation rules for `swiss_code`. Must not be greater than 100 characters.'
example: m
required:
- account_number
- country
- bank_name
- account_holder_name
- swiss_code
/api/v1/checkout/webhook/stripe:
post:
summary: ''
operationId: postApiV1CheckoutWebhookStripe
description: ''
parameters: []
responses: { }
tags:
- 'Checkout (Customer)'
security: []
/api/v1/checkout/preview:
post:
summary: ''
operationId: postApiV1CheckoutPreview
description: ''
parameters: []
responses: { }
tags:
- 'Checkout (Customer)'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
program_id:
type: integer
description: 'Auto-generated from validation rules for `program_id`. The id of an existing record in the programs table.'
example: 16
coach_id:
type: integer
description: 'Auto-generated from validation rules for `coach_id`. The id of an existing record in the coaches table.'
example: 16
slot_start_at:
type: string
description: 'Auto-generated from validation rules for `slot_start_at`. Must be a valid date.'
example: '2026-04-25T17:16:45'
coupon_code:
type: string
description: 'Auto-generated from validation rules for `coupon_code`. Must not be greater than 50 characters.'
example: 'n'
nullable: true
timezone:
type: string
description: 'Auto-generated from validation rules for `timezone`. Must be a valid time zone, such as Africa/Accra.'
example: Antarctica/Rothera
required:
- program_id
- coach_id
- slot_start_at
security: []
/api/v1/checkout/create-session:
post:
summary: ''
operationId: postApiV1CheckoutCreateSession
description: ''
parameters: []
responses: { }
tags:
- 'Checkout (Customer)'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
program_id:
type: integer
description: 'Auto-generated from validation rules for `program_id`. The id of an existing record in the programs table.'
example: 16
coach_id:
type: integer
description: 'Auto-generated from validation rules for `coach_id`. The id of an existing record in the coaches table.'
example: 16
slot_start_at:
type: string
description: 'Auto-generated from validation rules for `slot_start_at`. Must be a valid date.'
example: '2026-04-25T17:16:45'
coupon_code:
type: string
description: 'Auto-generated from validation rules for `coupon_code`. Must not be greater than 50 characters.'
example: 'n'
nullable: true
timezone:
type: string
description: 'Auto-generated from validation rules for `timezone`. Must be a valid time zone, such as Africa/Accra.'
example: Antarctica/Rothera
success_url:
type: string
description: 'Auto-generated from validation rules for `success_url`. Must be a valid URL.'
example: 'http://www.okuneva.com/fugiat-sunt-nihil-accusantium-harum-mollitia.html'
cancel_url:
type: string
description: 'Auto-generated from validation rules for `cancel_url`. Must be a valid URL.'
example: 'http://www.considine.com/provident-perspiciatis-quo-omnis-nostrum-aut-adipisci-quidem'
required:
- program_id
- coach_id
- slot_start_at
- success_url
- cancel_url
security: []
/api/v1/checkout/orders:
get:
summary: ''
operationId: getApiV1CheckoutOrders
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Checkout (Customer)'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
status:
type: string
description: ''
example: architecto
nullable: true
payment_status:
type: string
description: ''
example: architecto
nullable: true
per_page:
type: integer
description: 'Must be at least 1. Must not be greater than 100.'
example: 22
page:
type: integer
description: 'Must be at least 1.'
example: 67
security: []
'/api/v1/checkout/order/{orderId}':
get:
summary: ''
operationId: getApiV1CheckoutOrderOrderId
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Checkout (Customer)'
security: []
parameters:
-
in: path
name: orderId
description: ''
example: architecto
required: true
schema:
type: string
/api/v1/checkout/sessions/upcoming:
get:
summary: ''
operationId: getApiV1CheckoutSessionsUpcoming
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Checkout (Customer)'
security: []
/api/v1/customer/enrollments:
get:
summary: ''
operationId: getApiV1CustomerEnrollments
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Customer - Enrollments'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
occurrence_type:
type: string
description: ''
example: architecto
enrollment_status:
type: string
description: ''
example: architecto
per_page:
type: integer
description: 'Must be at least 1. Must not be greater than 100.'
example: 22
page:
type: integer
description: 'Must be at least 1.'
example: 67
security: []
'/api/v1/customer/enrollments/{enrollmentId}':
get:
summary: ''
operationId: getApiV1CustomerEnrollmentsEnrollmentId
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Customer - Enrollments'
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/customer/enrollments/{enrollmentId}/sessions':
get:
summary: ''
operationId: getApiV1CustomerEnrollmentsEnrollmentIdSessions
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Customer - Enrollments'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
session_ui_phase:
type: string
description: ''
example: architecto
per_page:
type: integer
description: 'Must be at least 1. Must not be greater than 100.'
example: 22
page:
type: integer
description: 'Must be at least 1.'
example: 67
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/customer/enrollments/{enrollmentId}/sessions/{sessionId}/available-slots':
get:
summary: ''
operationId: getApiV1CustomerEnrollmentsEnrollmentIdSessionsSessionIdAvailableSlots
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Customer - Enrollments'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
date:
type: string
description: 'Auto-generated from validation rules for `date`. Must be a valid date in the format Y-m-d.'
example: '2026-04-25'
timezone:
type: string
description: 'Auto-generated from validation rules for `timezone`. Must be a valid time zone, such as Africa/Accra.'
example: Asia/Yekaterinburg
required:
- date
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: sessionId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/customer/enrollments/{enrollmentId}/sessions/{sessionId}/schedule':
post:
summary: ''
operationId: postApiV1CustomerEnrollmentsEnrollmentIdSessionsSessionIdSchedule
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Enrollments'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
slot_start_at:
type: string
description: 'Auto-generated from validation rules for `slot_start_at`. Must be a valid date.'
example: '2026-04-25T17:16:47'
timezone:
type: string
description: 'Auto-generated from validation rules for `timezone`. Must be a valid time zone, such as Africa/Accra.'
example: Asia/Yekaterinburg
required:
- slot_start_at
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: sessionId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/customer/enrollments/{enrollmentId}/sessions/{sessionId}/reschedule':
post:
summary: ''
operationId: postApiV1CustomerEnrollmentsEnrollmentIdSessionsSessionIdReschedule
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Enrollments'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
slot_start_at:
type: string
description: 'Auto-generated from validation rules for `slot_start_at`. Must be a valid date.'
example: '2026-04-25T17:16:47'
timezone:
type: string
description: 'Auto-generated from validation rules for `timezone`. Must be a valid time zone, such as Africa/Accra.'
example: Asia/Yekaterinburg
required:
- slot_start_at
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: sessionId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/customer/enrollments/{enrollmentId}/sessions/{sessionId}/cancel':
post:
summary: ''
operationId: postApiV1CustomerEnrollmentsEnrollmentIdSessionsSessionIdCancel
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Enrollments'
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: sessionId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/customer/enrollments/{enrollmentId}/sessions/{sessionId}/video-token':
post:
summary: ''
operationId: postApiV1CustomerEnrollmentsEnrollmentIdSessionsSessionIdVideoToken
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Enrollments'
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: sessionId
description: ''
example: architecto
required: true
schema:
type: string
/api/v1/dispute/form-options:
get:
summary: ''
operationId: getApiV1DisputeFormOptions
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Customer - Disputes'
security: []
/api/v1/dispute:
get:
summary: ''
operationId: getApiV1Dispute
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Customer - Disputes'
security: []
post:
summary: ''
operationId: postApiV1Dispute
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Disputes'
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
subject:
type: string
description: 'Auto-generated from validation rules for `subject`. Must not be greater than 255 characters.'
example: b
category:
type: string
description: 'Auto-generated from validation rules for `category`.'
example: issue_with_coach
enum:
- issue_with_program
- issue_with_coach
- issue_with_payments
description:
type: string
description: 'Auto-generated from validation rules for `description`. Must not be greater than 5000 characters.'
example: 'Et animi quos velit et fugiat.'
program_id:
type: integer
description: 'Auto-generated from validation rules for `program_id`. The id of an existing record in the programs table.'
example: 16
nullable: true
coach_id:
type: integer
description: 'Auto-generated from validation rules for `coach_id`. The id of an existing record in the coaches table.'
example: 16
nullable: true
checkout_order_id:
type: integer
description: 'Auto-generated from validation rules for `checkout_order_id`. The id of an existing record in the checkout_orders table.'
example: 16
nullable: true
attachments:
type: array
description: 'Auto-generated from validation rules for `attachments.*`. Must be a file. Must not be greater than 250 kilobytes.'
items:
type: string
format: binary
required:
- subject
- category
- description
security: []
'/api/v1/dispute/{id}':
get:
summary: ''
operationId: getApiV1DisputeId
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Customer - Disputes'
security: []
put:
summary: ''
operationId: putApiV1DisputeId
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Disputes'
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
subject:
type: string
description: 'Auto-generated from validation rules for `subject`. Must not be greater than 255 characters.'
example: b
category:
type: string
description: 'Auto-generated from validation rules for `category`.'
example: issue_with_program
enum:
- issue_with_program
- issue_with_coach
- issue_with_payments
description:
type: string
description: 'Auto-generated from validation rules for `description`. Must not be greater than 5000 characters.'
example: 'Et animi quos velit et fugiat.'
program_id:
type: integer
description: 'Auto-generated from validation rules for `program_id`. The id of an existing record in the programs table.'
example: 16
nullable: true
coach_id:
type: integer
description: 'Auto-generated from validation rules for `coach_id`. The id of an existing record in the coaches table.'
example: 16
nullable: true
checkout_order_id:
type: integer
description: 'Auto-generated from validation rules for `checkout_order_id`. The id of an existing record in the checkout_orders table.'
example: 16
nullable: true
attachments:
type: array
description: 'Auto-generated from validation rules for `attachments.*`. Must be a file. Must not be greater than 250 kilobytes.'
items:
type: string
format: binary
required:
- subject
- category
- description
security: []
patch:
summary: ''
operationId: patchApiV1DisputeId
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Disputes'
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
subject:
type: string
description: 'Auto-generated from validation rules for `subject`. Must not be greater than 255 characters.'
example: b
category:
type: string
description: 'Auto-generated from validation rules for `category`.'
example: issue_with_program
enum:
- issue_with_program
- issue_with_coach
- issue_with_payments
description:
type: string
description: 'Auto-generated from validation rules for `description`. Must not be greater than 5000 characters.'
example: 'Et animi quos velit et fugiat.'
program_id:
type: integer
description: 'Auto-generated from validation rules for `program_id`. The id of an existing record in the programs table.'
example: 16
nullable: true
coach_id:
type: integer
description: 'Auto-generated from validation rules for `coach_id`. The id of an existing record in the coaches table.'
example: 16
nullable: true
checkout_order_id:
type: integer
description: 'Auto-generated from validation rules for `checkout_order_id`. The id of an existing record in the checkout_orders table.'
example: 16
nullable: true
attachments:
type: array
description: 'Auto-generated from validation rules for `attachments.*`. Must be a file. Must not be greater than 250 kilobytes.'
items:
type: string
format: binary
required:
- subject
- category
- description
security: []
delete:
summary: ''
operationId: deleteApiV1DisputeId
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Disputes'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the dispute.'
example: architecto
required: true
schema:
type: string
/api/v1/customer/reviews:
get:
summary: ''
operationId: getApiV1CustomerReviews
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Customer - Program Reviews'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
per_page:
type: integer
description: 'Must be at least 1. Must not be greater than 100.'
example: 1
page:
type: integer
description: 'Must be at least 1.'
example: 22
security: []
post:
summary: ''
operationId: postApiV1CustomerReviews
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Program Reviews'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
program_enrollment_id:
type: integer
description: 'Auto-generated from validation rules for `program_enrollment_id`. The id of an existing record in the program_enrollments table.'
example: 16
rating:
type: integer
description: 'Auto-generated from validation rules for `rating`. Must be at least 1. Must not be greater than 5.'
example: 2
body:
type: string
description: 'Auto-generated from validation rules for `body`. Must be at least 1 character. Must not be greater than 5000 characters.'
example: g
required:
- program_enrollment_id
- rating
- body
security: []
'/api/v1/customer/reviews/{reviewId}':
put:
summary: ''
operationId: putApiV1CustomerReviewsReviewId
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Program Reviews'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
rating:
type: integer
description: 'Auto-generated from validation rules for `rating`. Must be at least 1. Must not be greater than 5.'
example: 1
body:
type: string
description: 'Auto-generated from validation rules for `body`. Must be at least 1 character. Must not be greater than 5000 characters.'
example: 'n'
security: []
delete:
summary: ''
operationId: deleteApiV1CustomerReviewsReviewId
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Program Reviews'
security: []
parameters:
-
in: path
name: reviewId
description: ''
example: architecto
required: true
schema:
type: string
/api/v1/programs:
get:
summary: 'List programs (optional filter by active category).'
operationId: listProgramsoptionalFilterByActiveCategory
description: ''
parameters:
-
in: query
name: page
description: ''
example: 1
required: false
schema:
type: integer
description: ''
example: 1
-
in: query
name: per_page
description: ''
example: 15
required: false
schema:
type: integer
description: ''
example: 15
-
in: query
name: program_category_id
description: 'optional Only programs in this category (must be active).'
example: 2
required: false
schema:
type: integer
description: 'optional Only programs in this category (must be active).'
example: 2
responses:
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Program category not found or inactive.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Program category not found or inactive.'
tags:
- 'Programs (Guest / no auth)'
security: []
'/api/v1/programs/category/{categoryId}':
get:
summary: 'List programs in a specific active category.'
operationId: listProgramsInASpecificActiveCategory
description: ''
parameters:
-
in: query
name: page
description: ''
example: 1
required: false
schema:
type: integer
description: ''
example: 1
-
in: query
name: per_page
description: ''
example: 15
required: false
schema:
type: integer
description: ''
example: 15
responses:
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Program category not found or inactive.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Program category not found or inactive.'
tags:
- 'Programs (Guest / no auth)'
security: []
parameters:
-
in: path
name: categoryId
description: ''
example: 1
required: true
schema:
type: integer
'/api/v1/programs/{id}/facilitators':
get:
summary: 'List facilitators (coaches) assigned to one visible program.'
operationId: listFacilitatorscoachesAssignedToOneVisibleProgram
description: ''
parameters:
-
in: query
name: page
description: ''
example: 1
required: false
schema:
type: integer
description: ''
example: 1
-
in: query
name: per_page
description: ''
example: 15
required: false
schema:
type: integer
description: ''
example: 15
-
in: query
name: coach_type
description: 'optional Filter: Mentor or Yoga Trainer.'
example: Mentor
required: false
schema:
type: string
description: 'optional Filter: Mentor or Yoga Trainer.'
example: Mentor
responses:
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Program not found or unavailable.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Program not found or unavailable.'
tags:
- 'Programs (Guest / no auth)'
security: []
parameters:
-
in: path
name: id
description: ''
example: 1
required: true
schema:
type: integer
'/api/v1/programs/{id}/facilitators/{coachId}/slots':
get:
summary: 'List available slots for one facilitator on one date.'
operationId: listAvailableSlotsForOneFacilitatorOnOneDate
description: ''
parameters:
-
in: query
name: date
description: 'Date in YYYY-MM-DD.'
example: '2026-04-10'
required: true
schema:
type: string
description: 'Date in YYYY-MM-DD.'
example: '2026-04-10'
-
in: query
name: timezone
description: 'optional IANA timezone name. Defaults to UTC.'
example: Asia/Kolkata
required: false
schema:
type: string
description: 'optional IANA timezone name. Defaults to UTC.'
example: Asia/Kolkata
responses:
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Program not found or unavailable.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Program not found or unavailable.'
tags:
- 'Programs (Guest / no auth)'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
date:
type: string
description: 'Auto-generated from validation rules for `date`. Must be a valid date in the format Y-m-d.'
example: '2026-04-25'
timezone:
type: string
description: 'Auto-generated from validation rules for `timezone`. Must be a valid time zone, such as Africa/Accra.'
example: Asia/Yekaterinburg
required:
- date
security: []
parameters:
-
in: path
name: id
description: 'Program ID.'
example: 1
required: true
schema:
type: integer
-
in: path
name: coachId
description: 'Coach ID assigned to this program.'
example: 3
required: true
schema:
type: integer
'/api/v1/programs/{id}':
get:
summary: 'Program detail (marketing content only; no structure/modules).'
operationId: programDetailmarketingContentOnlyNoStructuremodules
description: ''
parameters: []
responses:
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Program not found or unavailable.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Program not found or unavailable.'
tags:
- 'Programs (Guest / no auth)'
security: []
parameters:
-
in: path
name: id
description: ''
example: 1
required: true
schema:
type: integer
/api/v1/coaches:
get:
summary: 'List coaches visible on the public directory.'
operationId: listCoachesVisibleOnThePublicDirectory
description: ''
parameters:
-
in: query
name: page
description: ''
example: 1
required: false
schema:
type: integer
description: ''
example: 1
-
in: query
name: per_page
description: ''
example: 15
required: false
schema:
type: integer
description: ''
example: 15
-
in: query
name: coach_type
description: 'optional Filter: `Mentor` or `Yoga Trainer`.'
example: Mentor
required: false
schema:
type: string
description: 'optional Filter: `Mentor` or `Yoga Trainer`.'
example: Mentor
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Coaches retrieved successfully'
data:
data: []
links:
first: 'https://ruhline-api.test/api/v1/coaches?page=1'
last: 'https://ruhline-api.test/api/v1/coaches?page=1'
prev: null
next: null
meta:
current_page: 1
from: null
last_page: 1
links:
-
url: null
label: '« Previous'
page: null
active: false
-
url: 'https://ruhline-api.test/api/v1/coaches?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Next »'
page: null
active: false
path: 'https://ruhline-api.test/api/v1/coaches'
per_page: 15
to: null
total: 0
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Coaches retrieved successfully'
data:
type: object
properties:
data:
type: array
example: []
links:
type: object
properties:
first:
type: string
example: 'https://ruhline-api.test/api/v1/coaches?page=1'
last:
type: string
example: 'https://ruhline-api.test/api/v1/coaches?page=1'
prev:
type: string
example: null
nullable: true
next:
type: string
example: null
nullable: true
meta:
type: object
properties:
current_page:
type: integer
example: 1
from:
type: string
example: null
nullable: true
last_page:
type: integer
example: 1
links:
type: array
example:
-
url: null
label: '« Previous'
page: null
active: false
-
url: 'https://ruhline-api.test/api/v1/coaches?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Next »'
page: null
active: false
items:
type: object
properties:
url:
type: string
example: null
nullable: true
label:
type: string
example: '« Previous'
page:
type: string
example: null
nullable: true
active:
type: boolean
example: false
path:
type: string
example: 'https://ruhline-api.test/api/v1/coaches'
per_page:
type: integer
example: 15
to:
type: string
example: null
nullable: true
total:
type: integer
example: 0
tags:
- 'Coaches (Guest / no auth)'
security: []
/api/v1/program:
get:
summary: 'List programs assigned to the authenticated coach.'
operationId: listProgramsAssignedToTheAuthenticatedCoach
description: ''
parameters:
-
in: query
name: page
description: 'The page number.'
example: 1
required: false
schema:
type: integer
description: 'The page number.'
example: 1
-
in: query
name: per_page
description: 'Number of items per page.'
example: 15
required: false
schema:
type: integer
description: 'Number of items per page.'
example: 15
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Coach - Programs'
security: []
'/api/v1/program/{programId}':
get:
summary: 'Get details of one program assigned to the authenticated coach.'
operationId: getDetailsOfOneProgramAssignedToTheAuthenticatedCoach
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Coach - Programs'
security: []
parameters:
-
in: path
name: programId
description: 'The ID of the program.'
example: 1
required: true
schema:
type: integer
'/api/v1/program/{programId}/availability':
get:
summary: 'Get coach availability and time-off for an assigned program.'
operationId: getCoachAvailabilityAndTimeOffForAnAssignedProgram
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Coach - Program Availability'
security: []
put:
summary: 'Replace coach availability rules for one assigned program.'
operationId: replaceCoachAvailabilityRulesForOneAssignedProgram
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Availability'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
rules:
type: array
description: 'Auto-generated from validation rules for `rules`.'
example:
- []
items:
type: object
properties:
day_of_week:
type: integer
description: 'Auto-generated from validation rules for `rules.*.day_of_week`. Must be at least 0. Must not be greater than 6.'
example: 4
start_time:
type: string
description: 'Auto-generated from validation rules for `rules.*.start_time`. Must be a valid date in the format H:i.'
example: '17:16'
end_time:
type: string
description: 'Auto-generated from validation rules for `rules.*.end_time`. Must be a valid date in the format H:i.'
example: '17:16'
effective_from:
type: string
description: 'Auto-generated from validation rules for `rules.*.effective_from`. Must be a valid date in the format Y-m-d.'
example: '2026-04-25'
effective_to:
type: string
description: 'Auto-generated from validation rules for `rules.*.effective_to`. Must be a valid date in the format Y-m-d. Must be a date after or equal to rules.*.effective_from.'
example: '2052-05-18'
nullable: true
is_active:
type: boolean
description: 'Auto-generated from validation rules for `rules.*.is_active`.'
example: true
required:
- day_of_week
- start_time
- end_time
- effective_from
required:
- rules
security: []
patch:
summary: 'Replace coach availability rules for one assigned program.'
operationId: replaceCoachAvailabilityRulesForOneAssignedProgram
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Availability'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
rules:
type: array
description: 'Auto-generated from validation rules for `rules`.'
example:
- []
items:
type: object
properties:
day_of_week:
type: integer
description: 'Auto-generated from validation rules for `rules.*.day_of_week`. Must be at least 0. Must not be greater than 6.'
example: 4
start_time:
type: string
description: 'Auto-generated from validation rules for `rules.*.start_time`. Must be a valid date in the format H:i.'
example: '17:16'
end_time:
type: string
description: 'Auto-generated from validation rules for `rules.*.end_time`. Must be a valid date in the format H:i.'
example: '17:16'
effective_from:
type: string
description: 'Auto-generated from validation rules for `rules.*.effective_from`. Must be a valid date in the format Y-m-d.'
example: '2026-04-25'
effective_to:
type: string
description: 'Auto-generated from validation rules for `rules.*.effective_to`. Must be a valid date in the format Y-m-d. Must be a date after or equal to rules.*.effective_from.'
example: '2052-05-18'
nullable: true
is_active:
type: boolean
description: 'Auto-generated from validation rules for `rules.*.is_active`.'
example: false
required:
- day_of_week
- start_time
- end_time
- effective_from
required:
- rules
security: []
parameters:
-
in: path
name: programId
description: 'The ID of the assigned program.'
example: 1
required: true
schema:
type: integer
'/api/v1/program/{programId}/time-off':
post:
summary: 'Add a time-off block for one assigned program.'
operationId: addATimeOffBlockForOneAssignedProgram
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Availability'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
start_at:
type: string
description: 'Auto-generated from validation rules for `start_at`. Must be a valid date.'
example: '2026-04-25T17:16:46'
end_at:
type: string
description: 'Auto-generated from validation rules for `end_at`. Must be a valid date. Must be a date after start_at.'
example: '2052-05-18'
reason:
type: string
description: 'Auto-generated from validation rules for `reason`. Must not be greater than 500 characters.'
example: 'n'
nullable: true
required:
- start_at
- end_at
security: []
parameters:
-
in: path
name: programId
description: 'The ID of the assigned program.'
example: 1
required: true
schema:
type: integer
'/api/v1/program/{programId}/time-off/{timeOffId}':
delete:
summary: 'Delete one time-off block for an assigned program.'
operationId: deleteOneTimeOffBlockForAnAssignedProgram
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Availability'
security: []
parameters:
-
in: path
name: programId
description: 'The ID of the assigned program.'
example: 1
required: true
schema:
type: integer
-
in: path
name: timeOffId
description: 'The ID of the time-off block.'
example: 5
required: true
schema:
type: integer
'/api/v1/program/{programId}/structure':
get:
summary: "List program structure for a coach, including flags\nabout whether each module can be edited and whether a\ncoach-specific copy exists."
operationId: listProgramStructureForACoachIncludingFlagsAboutWhetherEachModuleCanBeEditedAndWhetherACoachSpecificCopyExists
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Coach - Program Structure'
security: []
parameters:
-
in: path
name: programId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/program/{programId}/structure/{structureId}/quote':
get:
summary: ''
operationId: getApiV1ProgramProgramIdStructureStructureIdQuote
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Coach - Program Structure'
security: []
parameters:
-
in: path
name: programId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/program/{programId}/structure/{structureId}/goal-settings-module':
get:
summary: 'Goal Settings module has no extra configuration; coaches get metadata only.'
operationId: goalSettingsModuleHasNoExtraConfigurationCoachesGetMetadataOnly
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Coach - Program Structure'
security: []
parameters:
-
in: path
name: programId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/program/{programId}/structure/{structureId}/habit-tracker-module':
get:
summary: 'Habit Tracker module has no extra configuration; coaches get metadata only.'
operationId: habitTrackerModuleHasNoExtraConfigurationCoachesGetMetadataOnly
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Coach - Program Structure'
security: []
parameters:
-
in: path
name: programId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/program/{programId}/structure/{structureId}/card-game/question-sets':
get:
summary: ''
operationId: getApiV1ProgramProgramIdStructureStructureIdCardGameQuestionSets
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Coach - Program Structure'
security: []
parameters:
-
in: path
name: programId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/program/{programId}/structure/{structureId}/card-game/question-sets/{setId}/questions':
get:
summary: ''
operationId: getApiV1ProgramProgramIdStructureStructureIdCardGameQuestionSetsSetIdQuestions
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Coach - Program Structure'
security: []
parameters:
-
in: path
name: programId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: setId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/program/{programId}/structure/{structureId}/card-game/cards':
get:
summary: ''
operationId: getApiV1ProgramProgramIdStructureStructureIdCardGameCards
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Coach - Program Structure'
security: []
parameters:
-
in: path
name: programId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/program/{programId}/structure/{structureId}/intermediate-values':
get:
summary: ''
operationId: getApiV1ProgramProgramIdStructureStructureIdIntermediateValues
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Coach - Program Structure'
security: []
parameters:
-
in: path
name: programId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/program/{programId}/structure/{structureId}/intermediate-eight-most-common-mistakes':
get:
summary: ''
operationId: getApiV1ProgramProgramIdStructureStructureIdIntermediateEightMostCommonMistakes
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Coach - Program Structure'
security: []
parameters:
-
in: path
name: programId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/program/{programId}/structure/{structureId}/intermediate-goal-settings':
get:
summary: ''
operationId: getApiV1ProgramProgramIdStructureStructureIdIntermediateGoalSettings
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Coach - Program Structure'
security: []
parameters:
-
in: path
name: programId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/program/{programId}/structure/{structureId}/intermediate-questions-goal-why':
get:
summary: ''
operationId: getApiV1ProgramProgramIdStructureStructureIdIntermediateQuestionsGoalWhy
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Coach - Program Structure'
security: []
parameters:
-
in: path
name: programId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/program/{programId}/structure/{structureId}/intermediate-y-method':
get:
summary: ''
operationId: getApiV1ProgramProgramIdStructureStructureIdIntermediateYMethod
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Coach - Program Structure'
security: []
parameters:
-
in: path
name: programId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/program/{programId}/structure/{structureId}/words':
get:
summary: 'List words for a Find your Motivation module.'
operationId: listWordsForAFindYourMotivationModule
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Coach - Program Structure'
security: []
post:
summary: 'Create a coach-specific word (clones coach copy on first write).'
operationId: createACoachSpecificWordclonesCoachCopyOnFirstWrite
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
word:
type: string
description: 'Must not be greater than 255 characters.'
example: b
required:
- word
security: []
parameters:
-
in: path
name: programId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/program/{programId}/structure/{structureId}/words/{wordId}':
put:
summary: 'Update a coach-specific word.'
operationId: updateACoachSpecificWord
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
word:
type: string
description: 'Must not be greater than 255 characters.'
example: b
required:
- word
security: []
patch:
summary: 'Update a coach-specific word.'
operationId: updateACoachSpecificWord
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
word:
type: string
description: 'Must not be greater than 255 characters.'
example: b
required:
- word
security: []
delete:
summary: 'Delete a coach-specific word.'
operationId: deleteACoachSpecificWord
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Structure'
security: []
parameters:
-
in: path
name: programId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: wordId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/program/{programId}/structure/{structureId}/words/reorder':
put:
summary: 'Reorder coach-specific words.'
operationId: reorderCoachSpecificWords
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
order:
type: array
description: ''
example:
- 16
items:
type: integer
security: []
patch:
summary: 'Reorder coach-specific words.'
operationId: reorderCoachSpecificWords
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
order:
type: array
description: ''
example:
- 16
items:
type: integer
security: []
parameters:
-
in: path
name: programId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/program/{programId}/structure/{structureId}/values/questions':
get:
summary: "List Values questions for a coach (program defaults or\ncoach copy, depending on whether a copy exists)."
operationId: listValuesQuestionsForACoachprogramDefaultsOrCoachCopyDependingOnWhetherACopyExists
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Coach - Program Structure'
security: []
post:
summary: 'Create a coach-specific Values question (clones on first write).'
operationId: createACoachSpecificValuesQuestionclonesOnFirstWrite
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
type:
type: string
description: ''
example: null
question_text:
type: string
description: 'Must not be greater than 2000 characters.'
example: b
options:
type: array
description: 'Must not be greater than 500 characters.'
example:
- 'n'
items:
type: string
required:
- question_text
security: []
parameters:
-
in: path
name: programId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/program/{programId}/structure/{structureId}/values/questions/{questionId}':
put:
summary: 'Update a coach-specific Values question.'
operationId: updateACoachSpecificValuesQuestion
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
type:
type: string
description: ''
example: null
question_text:
type: string
description: 'Must not be greater than 2000 characters.'
example: b
options:
type: array
description: 'Must not be greater than 500 characters.'
example:
- 'n'
items:
type: string
required:
- question_text
security: []
patch:
summary: 'Update a coach-specific Values question.'
operationId: updateACoachSpecificValuesQuestion
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
type:
type: string
description: ''
example: null
question_text:
type: string
description: 'Must not be greater than 2000 characters.'
example: b
options:
type: array
description: 'Must not be greater than 500 characters.'
example:
- 'n'
items:
type: string
required:
- question_text
security: []
delete:
summary: 'Delete a coach-specific Values question.'
operationId: deleteACoachSpecificValuesQuestion
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Structure'
security: []
parameters:
-
in: path
name: programId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: questionId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/program/{programId}/structure/{structureId}/values/questions/reorder':
put:
summary: 'Reorder coach-specific Values questions.'
operationId: reorderCoachSpecificValuesQuestions
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
order:
type: array
description: ''
example:
- 16
items:
type: integer
security: []
patch:
summary: 'Reorder coach-specific Values questions.'
operationId: reorderCoachSpecificValuesQuestions
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
order:
type: array
description: ''
example:
- 16
items:
type: integer
security: []
parameters:
-
in: path
name: programId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/program/{programId}/structure/{structureId}/who-am-i/questions':
get:
summary: 'List Who am I questions for a coach.'
operationId: listWhoAmIQuestionsForACoach
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Coach - Program Structure'
security: []
post:
summary: 'Create a coach-specific Who am I question.'
operationId: createACoachSpecificWhoAmIQuestion
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
type:
type: string
description: ''
example: null
question_text:
type: string
description: 'Must not be greater than 2000 characters.'
example: b
options:
type: array
description: 'Must not be greater than 500 characters.'
example:
- 'n'
items:
type: string
required:
- question_text
security: []
parameters:
-
in: path
name: programId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/program/{programId}/structure/{structureId}/who-am-i/questions/{questionId}':
put:
summary: 'Update a coach-specific Who am I question.'
operationId: updateACoachSpecificWhoAmIQuestion
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
type:
type: string
description: ''
example: null
question_text:
type: string
description: 'Must not be greater than 2000 characters.'
example: b
options:
type: array
description: 'Must not be greater than 500 characters.'
example:
- 'n'
items:
type: string
required:
- question_text
security: []
patch:
summary: 'Update a coach-specific Who am I question.'
operationId: updateACoachSpecificWhoAmIQuestion
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
type:
type: string
description: ''
example: null
question_text:
type: string
description: 'Must not be greater than 2000 characters.'
example: b
options:
type: array
description: 'Must not be greater than 500 characters.'
example:
- 'n'
items:
type: string
required:
- question_text
security: []
delete:
summary: 'Delete a coach-specific Who am I question.'
operationId: deleteACoachSpecificWhoAmIQuestion
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Structure'
security: []
parameters:
-
in: path
name: programId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: questionId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/program/{programId}/structure/{structureId}/who-am-i/questions/reorder':
put:
summary: 'Reorder coach-specific Who am I questions.'
operationId: reorderCoachSpecificWhoAmIQuestions
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
order:
type: array
description: ''
example:
- 16
items:
type: integer
security: []
patch:
summary: 'Reorder coach-specific Who am I questions.'
operationId: reorderCoachSpecificWhoAmIQuestions
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
order:
type: array
description: ''
example:
- 16
items:
type: integer
security: []
parameters:
-
in: path
name: programId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/program/{programId}/structure/{structureId}/wheel-of-life/elements':
get:
summary: 'List life elements for a coach Wheel of Life module.'
operationId: listLifeElementsForACoachWheelOfLifeModule
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Coach - Program Structure'
security: []
post:
summary: 'Add a life element to a coach-specific Wheel of Life module.'
operationId: addALifeElementToACoachSpecificWheelOfLifeModule
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Must not be greater than 255 characters.'
example: b
required:
- name
security: []
parameters:
-
in: path
name: programId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/program/{programId}/structure/{structureId}/wheel-of-life/elements/{elementId}':
put:
summary: 'Update a coach-specific life element.'
operationId: updateACoachSpecificLifeElement
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Must not be greater than 255 characters.'
example: b
required:
- name
security: []
patch:
summary: 'Update a coach-specific life element.'
operationId: updateACoachSpecificLifeElement
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Must not be greater than 255 characters.'
example: b
required:
- name
security: []
delete:
summary: 'Delete a coach-specific life element.'
operationId: deleteACoachSpecificLifeElement
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Structure'
security: []
parameters:
-
in: path
name: programId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: elementId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/program/{programId}/structure/{structureId}/wheel-of-life/elements/reorder':
put:
summary: 'Reorder coach-specific life elements.'
operationId: reorderCoachSpecificLifeElements
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
order:
type: array
description: ''
example:
- 16
items:
type: integer
security: []
patch:
summary: 'Reorder coach-specific life elements.'
operationId: reorderCoachSpecificLifeElements
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
order:
type: array
description: ''
example:
- 16
items:
type: integer
security: []
parameters:
-
in: path
name: programId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/program/{programId}/structure/{structureId}/wheel-of-life/elements/{elementId}/questions':
get:
summary: 'List questions for a coach Wheel of Life element.'
operationId: listQuestionsForACoachWheelOfLifeElement
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Coach - Program Structure'
security: []
post:
summary: 'Add a question to a coach-specific Wheel of Life element.'
operationId: addAQuestionToACoachSpecificWheelOfLifeElement
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
type:
type: string
description: ''
example: null
question_text:
type: string
description: 'Must not be greater than 2000 characters.'
example: b
options:
type: array
description: 'Must not be greater than 500 characters.'
example:
- 'n'
items:
type: string
required:
- question_text
security: []
parameters:
-
in: path
name: programId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: elementId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/program/{programId}/structure/{structureId}/wheel-of-life/elements/{elementId}/questions/{questionId}':
put:
summary: 'Update a coach-specific Wheel of Life question.'
operationId: updateACoachSpecificWheelOfLifeQuestion
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
type:
type: string
description: ''
example: null
question_text:
type: string
description: 'Must not be greater than 2000 characters.'
example: b
options:
type: array
description: 'Must not be greater than 500 characters.'
example:
- 'n'
items:
type: string
required:
- question_text
security: []
patch:
summary: 'Update a coach-specific Wheel of Life question.'
operationId: updateACoachSpecificWheelOfLifeQuestion
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
type:
type: string
description: ''
example: null
question_text:
type: string
description: 'Must not be greater than 2000 characters.'
example: b
options:
type: array
description: 'Must not be greater than 500 characters.'
example:
- 'n'
items:
type: string
required:
- question_text
security: []
delete:
summary: 'Delete a coach-specific Wheel of Life question.'
operationId: deleteACoachSpecificWheelOfLifeQuestion
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Structure'
security: []
parameters:
-
in: path
name: programId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: elementId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: questionId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/program/{programId}/structure/{structureId}/wheel-of-life/elements/{elementId}/questions/reorder':
put:
summary: 'Reorder coach-specific Wheel of Life questions.'
operationId: reorderCoachSpecificWheelOfLifeQuestions
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
order:
type: array
description: ''
example:
- 16
items:
type: integer
security: []
patch:
summary: 'Reorder coach-specific Wheel of Life questions.'
operationId: reorderCoachSpecificWheelOfLifeQuestions
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
order:
type: array
description: ''
example:
- 16
items:
type: integer
security: []
parameters:
-
in: path
name: programId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: elementId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/program/{programId}/structure/{structureId}/upload-documents':
get:
summary: 'List upload documents for a coach.'
operationId: listUploadDocumentsForACoach
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Coach - Program Structure'
security: []
post:
summary: 'Upload one or more documents to an Upload Documents module.'
operationId: uploadOneOrMoreDocumentsToAnUploadDocumentsModule
description: "Single file: multipart field \"file\" (optional \"original_name\").\nMultiple files: multipart field \"files[]\" (array of files)."
parameters: []
responses: { }
tags:
- 'Coach - Program Structure'
requestBody:
required: false
content:
multipart/form-data:
schema:
type: object
properties:
file:
type: string
format: binary
description: 'Must be a file. Must not be greater than 20480 kilobytes.'
nullable: true
files:
type: array
description: 'Must be a file. Must not be greater than 20480 kilobytes.'
items:
type: string
format: binary
original_name:
type: string
description: 'Must not be greater than 255 characters.'
example: b
nullable: true
security: []
parameters:
-
in: path
name: programId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/program/{programId}/structure/{structureId}/upload-documents/{documentId}':
put:
summary: "Update a coach document's original name."
operationId: updateACoachDocumentsOriginalName
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
original_name:
type: string
description: 'Must not be greater than 255 characters.'
example: b
nullable: true
security: []
patch:
summary: "Update a coach document's original name."
operationId: updateACoachDocumentsOriginalName
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
original_name:
type: string
description: 'Must not be greater than 255 characters.'
example: b
nullable: true
security: []
delete:
summary: 'Delete a coach document (and remove its file from storage).'
operationId: deleteACoachDocumentandRemoveItsFileFromStorage
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Structure'
security: []
parameters:
-
in: path
name: programId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: documentId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/program/{programId}/structure/{structureId}/upload-documents/reorder':
put:
summary: 'Reorder coach documents.'
operationId: reorderCoachDocuments
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
order:
type: array
description: ''
example:
- 16
items:
type: integer
security: []
patch:
summary: 'Reorder coach documents.'
operationId: reorderCoachDocuments
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
order:
type: array
description: ''
example:
- 16
items:
type: integer
security: []
parameters:
-
in: path
name: programId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
/api/v1/coach/dispute/form-options:
get:
summary: ''
operationId: getApiV1CoachDisputeFormOptions
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Coach - Disputes'
security: []
/api/v1/coach/dispute:
get:
summary: ''
operationId: getApiV1CoachDispute
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Coach - Disputes'
security: []
post:
summary: ''
operationId: postApiV1CoachDispute
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Disputes'
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
subject:
type: string
description: 'Auto-generated from validation rules for `subject`. Must not be greater than 255 characters.'
example: b
category:
type: string
description: 'Auto-generated from validation rules for `category`.'
example: issue_with_payments
enum:
- issue_with_program
- issue_with_payments
description:
type: string
description: 'Auto-generated from validation rules for `description`. Must not be greater than 5000 characters.'
example: 'Et animi quos velit et fugiat.'
program_id:
type: integer
description: 'Auto-generated from validation rules for `program_id`. This field is required when category is issue_with_program. The id of an existing record in the programs table.'
example: 16
nullable: true
payout_id:
type: integer
description: 'Auto-generated from validation rules for `payout_id`. This field is required when category is issue_with_payments. The id of an existing record in the payouts table.'
example: 16
nullable: true
attachments:
type: array
description: 'Auto-generated from validation rules for `attachments.*`. Must be a file. Must not be greater than 250 kilobytes.'
items:
type: string
format: binary
required:
- subject
- category
- description
security: []
'/api/v1/coach/dispute/{id}':
get:
summary: ''
operationId: getApiV1CoachDisputeId
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Coach - Disputes'
security: []
put:
summary: ''
operationId: putApiV1CoachDisputeId
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Disputes'
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
subject:
type: string
description: 'Auto-generated from validation rules for `subject`. Must not be greater than 255 characters.'
example: b
category:
type: string
description: 'Auto-generated from validation rules for `category`.'
example: issue_with_payments
enum:
- issue_with_program
- issue_with_payments
description:
type: string
description: 'Auto-generated from validation rules for `description`. Must not be greater than 5000 characters.'
example: 'Et animi quos velit et fugiat.'
program_id:
type: integer
description: 'Auto-generated from validation rules for `program_id`. This field is required when category is issue_with_program. The id of an existing record in the programs table.'
example: 16
nullable: true
payout_id:
type: integer
description: 'Auto-generated from validation rules for `payout_id`. This field is required when category is issue_with_payments. The id of an existing record in the payouts table.'
example: 16
nullable: true
attachments:
type: array
description: 'Auto-generated from validation rules for `attachments.*`. Must be a file. Must not be greater than 250 kilobytes.'
items:
type: string
format: binary
required:
- subject
- category
- description
security: []
patch:
summary: ''
operationId: patchApiV1CoachDisputeId
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Disputes'
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
subject:
type: string
description: 'Auto-generated from validation rules for `subject`. Must not be greater than 255 characters.'
example: b
category:
type: string
description: 'Auto-generated from validation rules for `category`.'
example: issue_with_payments
enum:
- issue_with_program
- issue_with_payments
description:
type: string
description: 'Auto-generated from validation rules for `description`. Must not be greater than 5000 characters.'
example: 'Et animi quos velit et fugiat.'
program_id:
type: integer
description: 'Auto-generated from validation rules for `program_id`. This field is required when category is issue_with_program. The id of an existing record in the programs table.'
example: 16
nullable: true
payout_id:
type: integer
description: 'Auto-generated from validation rules for `payout_id`. This field is required when category is issue_with_payments. The id of an existing record in the payouts table.'
example: 16
nullable: true
attachments:
type: array
description: 'Auto-generated from validation rules for `attachments.*`. Must be a file. Must not be greater than 250 kilobytes.'
items:
type: string
format: binary
required:
- subject
- category
- description
security: []
delete:
summary: ''
operationId: deleteApiV1CoachDisputeId
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Disputes'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the dispute.'
example: architecto
required: true
schema:
type: string
/api/v1/payout:
get:
summary: ''
operationId: getApiV1Payout
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Coach - Payouts'
security: []
/api/v1/admin/about-page:
get:
summary: 'Get about page data (admin)'
operationId: getAboutPageDataadmin
description: 'Returns the full about page content for editing.'
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - About Page (CMS)'
security: []
put:
summary: 'Update about page'
operationId: updateAboutPage
description: "Update section 01, mission/vision/values, and founder. All sections are optional.\nUse multipart/form-data for image uploads."
parameters: []
responses: { }
tags:
- 'Admin - About Page (CMS)'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
section_one:
type: array
description: 'optional Section 01 (About Us).'
example:
- architecto
items:
type: string
nullable: true
mission_vision_values:
type: array
description: 'optional Array of { type, title, description, icon } (type: mission, vision, values).'
example:
- architecto
items:
type: string
nullable: true
founder:
type: array
description: 'optional Section 03 (Our Founder).'
example:
- architecto
items:
type: string
nullable: true
security: []
patch:
summary: 'Update about page'
operationId: updateAboutPage
description: "Update section 01, mission/vision/values, and founder. All sections are optional.\nUse multipart/form-data for image uploads."
parameters: []
responses: { }
tags:
- 'Admin - About Page (CMS)'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
section_one:
type: array
description: 'optional Section 01 (About Us).'
example:
- architecto
items:
type: string
nullable: true
mission_vision_values:
type: array
description: 'optional Array of { type, title, description, icon } (type: mission, vision, values).'
example:
- architecto
items:
type: string
nullable: true
founder:
type: array
description: 'optional Section 03 (Our Founder).'
example:
- architecto
items:
type: string
nullable: true
security: []
/api/v1/about-page:
get:
summary: 'Get about page'
operationId: getAboutPage
description: 'Returns Section 01 (About Us), Section 02 (Mission, Vision, Values), and Section 03 (Our Founder).'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'About page retrieved successfully'
data:
section_01:
headline: null
about_us_image: null
secondary_headline: null
description: null
section_02:
mission_vision_values:
-
id: 1
type: mission
title: Mission
description: null
icon: null
-
id: 2
type: vision
title: Vision
description: null
icon: null
-
id: 3
type: values
title: Values
description: null
icon: null
section_03:
headline: null
secondary_headline: null
image: null
description: null
updated_at: '2026-04-25T17:05:01+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'About page retrieved successfully'
data:
type: object
properties:
section_01:
type: object
properties:
headline:
type: string
example: null
nullable: true
about_us_image:
type: string
example: null
nullable: true
secondary_headline:
type: string
example: null
nullable: true
description:
type: string
example: null
nullable: true
section_02:
type: object
properties:
mission_vision_values:
type: array
example:
-
id: 1
type: mission
title: Mission
description: null
icon: null
-
id: 2
type: vision
title: Vision
description: null
icon: null
-
id: 3
type: values
title: Values
description: null
icon: null
items:
type: object
properties:
id:
type: integer
example: 1
type:
type: string
example: mission
title:
type: string
example: Mission
description:
type: string
example: null
nullable: true
icon:
type: string
example: null
nullable: true
section_03:
type: object
properties:
headline:
type: string
example: null
nullable: true
secondary_headline:
type: string
example: null
nullable: true
image:
type: string
example: null
nullable: true
description:
type: string
example: null
nullable: true
updated_at:
type: string
example: '2026-04-25T17:05:01+00:00'
tags:
- 'About Page (Public)'
security: []
/api/v1/admin/article/article-category:
get:
summary: 'Get list of article categories (with articles count)'
operationId: getListOfArticleCategorieswithArticlesCount
description: ''
parameters:
-
in: query
name: page
description: 'The page number.'
example: 1
required: false
schema:
type: integer
description: 'The page number.'
example: 1
-
in: query
name: per_page
description: 'Number of items per page.'
example: 15
required: false
schema:
type: integer
description: 'Number of items per page.'
example: 15
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Article Category Management'
security: []
post:
summary: 'Create a new article category'
operationId: createANewArticleCategory
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Article Category Management'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The category name.'
example: 'Fitness Tips'
is_active:
type: string
description: 'optional "true" or "false". Default true.'
example: 'true'
nullable: true
required:
- name
security: []
'/api/v1/admin/article/article-category/{id}':
get:
summary: 'Get a specific article category'
operationId: getASpecificArticleCategory
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Article Category Management'
security: []
put:
summary: 'Update an article category'
operationId: updateAnArticleCategory
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Article Category Management'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'optional The category name.'
example: architecto
is_active:
type: string
description: 'optional "true" or "false".'
example: architecto
nullable: true
security: []
patch:
summary: 'Update an article category'
operationId: updateAnArticleCategory
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Article Category Management'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'optional The category name.'
example: architecto
is_active:
type: string
description: 'optional "true" or "false".'
example: architecto
nullable: true
security: []
delete:
summary: 'Delete an article category'
operationId: deleteAnArticleCategory
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Article Category Management'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the article category.'
example: 1
required: true
schema:
type: integer
/api/v1/admin/article/article:
get:
summary: 'Get list of articles'
operationId: getListOfArticles
description: ''
parameters:
-
in: query
name: page
description: 'The page number.'
example: 1
required: false
schema:
type: integer
description: 'The page number.'
example: 1
-
in: query
name: per_page
description: 'Number of items per page.'
example: 15
required: false
schema:
type: integer
description: 'Number of items per page.'
example: 15
-
in: query
name: article_category_id
description: 'optional Filter by category.'
example: 1
required: false
schema:
type: integer
description: 'optional Filter by category.'
example: 1
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Article Management'
security: []
post:
summary: 'Create a new article'
operationId: createANewArticle
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Article Management'
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
article_category_id:
type: integer
description: 'Article category ID.'
example: 1
name:
type: string
description: 'Article name.'
example: 'How to Stay Fit'
thumbnail_image:
type: string
format: binary
description: 'optional Thumbnail image.'
nullable: true
description:
type: string
description: 'optional Article description.'
example: 'Eius et animi quos velit et.'
nullable: true
share_facebook:
type: string
description: 'optional "true" or "false". Default true.'
example: architecto
nullable: true
share_twitter:
type: string
description: 'optional "true" or "false". Default true.'
example: architecto
nullable: true
share_linkedin:
type: string
description: 'optional "true" or "false". Default true.'
example: architecto
nullable: true
sections:
type: array
description: 'optional Array of sections. Each: image (file), image_position (left|right|center), heading, description, button, button_url, sort_order.'
example:
- architecto
items:
type: string
nullable: true
required:
- article_category_id
- name
security: []
'/api/v1/admin/article/article/{id}':
get:
summary: 'Get a specific article'
operationId: getASpecificArticle
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Article Management'
security: []
post:
summary: 'Update an article'
operationId: updateAnArticle
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Article Management'
requestBody:
required: false
content:
multipart/form-data:
schema:
type: object
properties:
article_category_id:
type: integer
description: 'optional Article category ID.'
example: 16
name:
type: string
description: 'optional Article name.'
example: architecto
thumbnail_image:
type: string
format: binary
description: 'optional Thumbnail image.'
nullable: true
description:
type: string
description: 'optional Article description.'
example: 'Eius et animi quos velit et.'
nullable: true
share_facebook:
type: string
description: 'optional "true" or "false".'
example: architecto
nullable: true
share_twitter:
type: string
description: 'optional "true" or "false".'
example: architecto
nullable: true
share_linkedin:
type: string
description: 'optional "true" or "false".'
example: architecto
nullable: true
sections:
type: array
description: 'optional Full replacement of sections. Each: id (optional for existing), image (file), image_position, heading, description, button, button_url, sort_order.'
example:
- architecto
items:
type: string
nullable: true
security: []
put:
summary: 'Update an article'
operationId: updateAnArticle
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Article Management'
requestBody:
required: false
content:
multipart/form-data:
schema:
type: object
properties:
article_category_id:
type: integer
description: 'optional Article category ID.'
example: 16
name:
type: string
description: 'optional Article name.'
example: architecto
thumbnail_image:
type: string
format: binary
description: 'optional Thumbnail image.'
nullable: true
description:
type: string
description: 'optional Article description.'
example: 'Eius et animi quos velit et.'
nullable: true
share_facebook:
type: string
description: 'optional "true" or "false".'
example: architecto
nullable: true
share_twitter:
type: string
description: 'optional "true" or "false".'
example: architecto
nullable: true
share_linkedin:
type: string
description: 'optional "true" or "false".'
example: architecto
nullable: true
sections:
type: array
description: 'optional Full replacement of sections. Each: id (optional for existing), image (file), image_position, heading, description, button, button_url, sort_order.'
example:
- architecto
items:
type: string
nullable: true
security: []
patch:
summary: 'Update an article'
operationId: updateAnArticle
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Article Management'
requestBody:
required: false
content:
multipart/form-data:
schema:
type: object
properties:
article_category_id:
type: integer
description: 'optional Article category ID.'
example: 16
name:
type: string
description: 'optional Article name.'
example: architecto
thumbnail_image:
type: string
format: binary
description: 'optional Thumbnail image.'
nullable: true
description:
type: string
description: 'optional Article description.'
example: 'Eius et animi quos velit et.'
nullable: true
share_facebook:
type: string
description: 'optional "true" or "false".'
example: architecto
nullable: true
share_twitter:
type: string
description: 'optional "true" or "false".'
example: architecto
nullable: true
share_linkedin:
type: string
description: 'optional "true" or "false".'
example: architecto
nullable: true
sections:
type: array
description: 'optional Full replacement of sections. Each: id (optional for existing), image (file), image_position, heading, description, button, button_url, sort_order.'
example:
- architecto
items:
type: string
nullable: true
security: []
delete:
summary: 'Delete an article'
operationId: deleteAnArticle
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Article Management'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the article.'
example: 1
required: true
schema:
type: integer
/api/v1/article/article-category:
get:
summary: 'List active article categories (with articles count)'
operationId: listActiveArticleCategorieswithArticlesCount
description: ''
parameters:
-
in: query
name: page
description: 'The page number.'
example: 1
required: false
schema:
type: integer
description: 'The page number.'
example: 1
-
in: query
name: per_page
description: 'Number of items per page.'
example: 15
required: false
schema:
type: integer
description: 'Number of items per page.'
example: 15
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Article categories retrieved successfully'
data:
data: []
links:
first: 'https://ruhline-api.test/api/v1/article/article-category?page=1'
last: 'https://ruhline-api.test/api/v1/article/article-category?page=1'
prev: null
next: null
meta:
current_page: 1
from: null
last_page: 1
links:
-
url: null
label: '« Previous'
page: null
active: false
-
url: 'https://ruhline-api.test/api/v1/article/article-category?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Next »'
page: null
active: false
path: 'https://ruhline-api.test/api/v1/article/article-category'
per_page: 15
to: null
total: 0
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Article categories retrieved successfully'
data:
type: object
properties:
data:
type: array
example: []
links:
type: object
properties:
first:
type: string
example: 'https://ruhline-api.test/api/v1/article/article-category?page=1'
last:
type: string
example: 'https://ruhline-api.test/api/v1/article/article-category?page=1'
prev:
type: string
example: null
nullable: true
next:
type: string
example: null
nullable: true
meta:
type: object
properties:
current_page:
type: integer
example: 1
from:
type: string
example: null
nullable: true
last_page:
type: integer
example: 1
links:
type: array
example:
-
url: null
label: '« Previous'
page: null
active: false
-
url: 'https://ruhline-api.test/api/v1/article/article-category?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Next »'
page: null
active: false
items:
type: object
properties:
url:
type: string
example: null
nullable: true
label:
type: string
example: '« Previous'
page:
type: string
example: null
nullable: true
active:
type: boolean
example: false
path:
type: string
example: 'https://ruhline-api.test/api/v1/article/article-category'
per_page:
type: integer
example: 15
to:
type: string
example: null
nullable: true
total:
type: integer
example: 0
tags:
- 'Article Categories (Public)'
security: []
'/api/v1/article/article-category/{id}':
get:
summary: 'Get a single active article category'
operationId: getASingleActiveArticleCategory
description: ''
parameters: []
responses:
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Article category not found.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Article category not found.'
tags:
- 'Article Categories (Public)'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the article category.'
example: 1
required: true
schema:
type: integer
/api/v1/article/article:
get:
summary: 'List articles'
operationId: listArticles
description: ''
parameters:
-
in: query
name: page
description: 'The page number.'
example: 1
required: false
schema:
type: integer
description: 'The page number.'
example: 1
-
in: query
name: per_page
description: 'Number of items per page.'
example: 15
required: false
schema:
type: integer
description: 'Number of items per page.'
example: 15
-
in: query
name: article_category_id
description: 'optional Filter by category.'
example: 1
required: false
schema:
type: integer
description: 'optional Filter by category.'
example: 1
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Articles retrieved successfully'
data:
data: []
links:
first: 'https://ruhline-api.test/api/v1/article/article?page=1'
last: 'https://ruhline-api.test/api/v1/article/article?page=1'
prev: null
next: null
meta:
current_page: 1
from: null
last_page: 1
links:
-
url: null
label: '« Previous'
page: null
active: false
-
url: 'https://ruhline-api.test/api/v1/article/article?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Next »'
page: null
active: false
path: 'https://ruhline-api.test/api/v1/article/article'
per_page: 15
to: null
total: 0
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Articles retrieved successfully'
data:
type: object
properties:
data:
type: array
example: []
links:
type: object
properties:
first:
type: string
example: 'https://ruhline-api.test/api/v1/article/article?page=1'
last:
type: string
example: 'https://ruhline-api.test/api/v1/article/article?page=1'
prev:
type: string
example: null
nullable: true
next:
type: string
example: null
nullable: true
meta:
type: object
properties:
current_page:
type: integer
example: 1
from:
type: string
example: null
nullable: true
last_page:
type: integer
example: 1
links:
type: array
example:
-
url: null
label: '« Previous'
page: null
active: false
-
url: 'https://ruhline-api.test/api/v1/article/article?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Next »'
page: null
active: false
items:
type: object
properties:
url:
type: string
example: null
nullable: true
label:
type: string
example: '« Previous'
page:
type: string
example: null
nullable: true
active:
type: boolean
example: false
path:
type: string
example: 'https://ruhline-api.test/api/v1/article/article'
per_page:
type: integer
example: 15
to:
type: string
example: null
nullable: true
total:
type: integer
example: 0
tags:
- 'Articles (Public)'
security: []
'/api/v1/article/article/{id}':
get:
summary: 'Get a single article'
operationId: getASingleArticle
description: ''
parameters: []
responses:
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Article not found.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Article not found.'
tags:
- 'Articles (Public)'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the article.'
example: 1
required: true
schema:
type: integer
/api/v1/admin/card-category/cards:
get:
summary: 'Get list of cards'
operationId: getListOfCards
description: ''
parameters:
-
in: query
name: page
description: 'The page number.'
example: 1
required: false
schema:
type: integer
description: 'The page number.'
example: 1
-
in: query
name: per_page
description: 'Number of items per page.'
example: 15
required: false
schema:
type: integer
description: 'Number of items per page.'
example: 15
-
in: query
name: card_category_id
description: 'optional Filter by card category.'
example: 1
required: false
schema:
type: integer
description: 'optional Filter by card category.'
example: 1
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Card Management'
security: []
post:
summary: 'Create a new card'
operationId: createANewCard
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Card Management'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
card_category_id:
type: integer
description: 'Card category ID.'
example: 1
name:
type: string
description: 'Card name.'
example: 'The Fool'
description:
type: string
description: 'optional Card description.'
example: 'Eius et animi quos velit et.'
nullable: true
required:
- card_category_id
- name
security: []
'/api/v1/admin/card-category/cards/{id}':
get:
summary: 'Get a specific card'
operationId: getASpecificCard
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Card Management'
security: []
put:
summary: 'Update a card'
operationId: updateACard
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Card Management'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
card_category_id:
type: integer
description: 'optional Card category ID.'
example: 16
name:
type: string
description: 'optional Card name.'
example: architecto
description:
type: string
description: 'optional Card description.'
example: 'Eius et animi quos velit et.'
nullable: true
security: []
patch:
summary: 'Update a card'
operationId: updateACard
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Card Management'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
card_category_id:
type: integer
description: 'optional Card category ID.'
example: 16
name:
type: string
description: 'optional Card name.'
example: architecto
description:
type: string
description: 'optional Card description.'
example: 'Eius et animi quos velit et.'
nullable: true
security: []
delete:
summary: 'Delete a card'
operationId: deleteACard
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Card Management'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the card.'
example: 1
required: true
schema:
type: integer
/api/v1/admin/card-category:
get:
summary: 'Get list of card categories (with cards count)'
operationId: getListOfCardCategorieswithCardsCount
description: ''
parameters:
-
in: query
name: page
description: 'The page number.'
example: 1
required: false
schema:
type: integer
description: 'The page number.'
example: 1
-
in: query
name: per_page
description: 'Number of items per page.'
example: 15
required: false
schema:
type: integer
description: 'Number of items per page.'
example: 15
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Card Category Management'
security: []
post:
summary: 'Create a new card category'
operationId: createANewCardCategory
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Card Category Management'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The card category name.'
example: Tarot
required:
- name
security: []
'/api/v1/admin/card-category/{id}':
get:
summary: 'Get a specific card category'
operationId: getASpecificCardCategory
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Card Category Management'
security: []
put:
summary: 'Update a card category'
operationId: updateACardCategory
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Card Category Management'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'optional The card category name.'
example: architecto
security: []
patch:
summary: 'Update a card category'
operationId: updateACardCategory
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Card Category Management'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'optional The card category name.'
example: architecto
security: []
delete:
summary: 'Delete a card category'
operationId: deleteACardCategory
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Card Category Management'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the card category.'
example: 1
required: true
schema:
type: integer
/api/v1/admin/checkout/orders:
get:
summary: ''
operationId: getApiV1AdminCheckoutOrders
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Checkout Orders'
security: []
'/api/v1/admin/checkout/orders/{id}':
get:
summary: ''
operationId: getApiV1AdminCheckoutOrdersId
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Checkout Orders'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the order.'
example: architecto
required: true
schema:
type: string
/api/v1/admin/coach:
get:
summary: 'Get list of all coaches'
operationId: getListOfAllCoaches
description: 'Retrieve a paginated list of all coaches with their profiles.'
parameters:
-
in: query
name: page
description: 'The page number.'
example: 1
required: false
schema:
type: integer
description: 'The page number.'
example: 1
-
in: query
name: per_page
description: 'Number of items per page.'
example: 15
required: false
schema:
type: integer
description: 'Number of items per page.'
example: 15
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Coaches retrieved successfully'
data:
current_page: 1
data:
-
id: 1
user:
id: 1
first_name: John
last_name: Doe
email: john@example.com
profile:
phone: '1234567890'
gender: male
coach_type: Mentor
profile_image: 'http://example.com/storage/coaches/profiles/image.jpg'
total: 10
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Coaches retrieved successfully'
data:
type: object
properties:
current_page:
type: integer
example: 1
data:
type: array
example:
-
id: 1
user:
id: 1
first_name: John
last_name: Doe
email: john@example.com
profile:
phone: '1234567890'
gender: male
coach_type: Mentor
profile_image: 'http://example.com/storage/coaches/profiles/image.jpg'
items:
type: object
properties:
id:
type: integer
example: 1
user:
type: object
properties:
id:
type: integer
example: 1
first_name:
type: string
example: John
last_name:
type: string
example: Doe
email:
type: string
example: john@example.com
profile:
type: object
properties:
phone:
type: string
example: '1234567890'
gender:
type: string
example: male
coach_type:
type: string
example: Mentor
profile_image:
type: string
example: 'http://example.com/storage/coaches/profiles/image.jpg'
total:
type: integer
example: 10
tags:
- 'Admin - Coach Management'
security: []
post:
summary: 'Create a new coach'
operationId: createANewCoach
description: 'Create a new coach account with profile information. An email will be sent to the coach with their login credentials.'
parameters: []
responses:
201:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Coach created successfully'
data:
id: 1
user:
id: 1
first_name: John
last_name: Doe
email: john@example.com
profile:
phone: '1234567890'
gender: male
coach_type: Mentor
profile_image: 'http://example.com/storage/coaches/profiles/image.jpg'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Coach created successfully'
data:
type: object
properties:
id:
type: integer
example: 1
user:
type: object
properties:
id:
type: integer
example: 1
first_name:
type: string
example: John
last_name:
type: string
example: Doe
email:
type: string
example: john@example.com
profile:
type: object
properties:
phone:
type: string
example: '1234567890'
gender:
type: string
example: male
coach_type:
type: string
example: Mentor
profile_image:
type: string
example: 'http://example.com/storage/coaches/profiles/image.jpg'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation error'
errors:
email:
- 'The email has already been taken.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation error'
errors:
type: object
properties:
email:
type: array
example:
- 'The email has already been taken.'
items:
type: string
tags:
- 'Admin - Coach Management'
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
first_name:
type: string
description: "The coach's first name."
example: John
last_name:
type: string
description: "The coach's last name."
example: Doe
email:
type: string
description: "The coach's email address."
example: john@example.com
phone:
type: string
description: "The coach's phone number."
example: '1234567890'
phone_country_code_id:
type: integer
description: 'The phone country code ID.'
example: 1
gender:
type: string
description: "The coach's gender (male, female, other)."
example: male
coach_type:
type: string
description: 'The coach type (Mentor, Yoga Trainer).'
example: Mentor
password:
type: string
description: "The coach's password."
example: password123
notes:
type: string
description: 'Optional notes about the coach.'
example: 'Experienced mentor with 10 years of experience.'
nullable: true
profile_image:
type: string
format: binary
description: "optional The coach's profile image. Must be an image file (jpeg, png, jpg, gif) and not exceed 2MB."
nullable: true
password_confirmation:
type: string
description: 'Password confirmation.'
example: password123
required:
- first_name
- last_name
- email
- phone
- phone_country_code_id
- gender
- coach_type
- password
- password_confirmation
security: []
'/api/v1/admin/coach/{id}':
get:
summary: 'Get a specific coach'
operationId: getASpecificCoach
description: 'Retrieve detailed information about a specific coach.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Coach retrieved successfully'
data:
id: 1
user:
id: 1
first_name: John
last_name: Doe
email: john@example.com
profile:
phone: '1234567890'
gender: male
coach_type: Mentor
profile_image: 'http://example.com/storage/coaches/profiles/image.jpg'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Coach retrieved successfully'
data:
type: object
properties:
id:
type: integer
example: 1
user:
type: object
properties:
id:
type: integer
example: 1
first_name:
type: string
example: John
last_name:
type: string
example: Doe
email:
type: string
example: john@example.com
profile:
type: object
properties:
phone:
type: string
example: '1234567890'
gender:
type: string
example: male
coach_type:
type: string
example: Mentor
profile_image:
type: string
example: 'http://example.com/storage/coaches/profiles/image.jpg'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Coach not found.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Coach not found.'
tags:
- 'Admin - Coach Management'
security: []
put:
summary: 'Update a coach'
operationId: updateACoach
description: 'Update coach information and profile details.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Coach updated successfully'
data:
id: 1
user:
id: 1
first_name: John
last_name: Doe
email: john@example.com
profile:
phone: '1234567890'
gender: male
coach_type: Mentor
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Coach updated successfully'
data:
type: object
properties:
id:
type: integer
example: 1
user:
type: object
properties:
id:
type: integer
example: 1
first_name:
type: string
example: John
last_name:
type: string
example: Doe
email:
type: string
example: john@example.com
profile:
type: object
properties:
phone:
type: string
example: '1234567890'
gender:
type: string
example: male
coach_type:
type: string
example: Mentor
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Coach not found.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Coach not found.'
tags:
- 'Admin - Coach Management'
requestBody:
required: false
content:
multipart/form-data:
schema:
type: object
properties:
first_name:
type: string
description: "optional The coach's first name."
example: John
last_name:
type: string
description: "optional The coach's last name."
example: Doe
email:
type: string
description: "optional The coach's email address."
example: john@example.com
phone:
type: string
description: "optional The coach's phone number."
example: '1234567890'
phone_country_code_id:
type: integer
description: 'optional The phone country code ID.'
example: 1
gender:
type: string
description: "optional The coach's gender (male, female, other)."
example: male
coach_type:
type: string
description: 'optional The coach type (Mentor, Yoga Trainer).'
example: Mentor
notes:
type: string
description: 'Optional notes about the coach.'
example: 'Experienced mentor with 10 years of experience.'
nullable: true
profile_image:
type: string
format: binary
description: "optional The coach's profile image. Must be an image file (jpeg, png, jpg, gif) and not exceed 2MB."
security: []
patch:
summary: 'Update a coach'
operationId: updateACoach
description: 'Update coach information and profile details.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Coach updated successfully'
data:
id: 1
user:
id: 1
first_name: John
last_name: Doe
email: john@example.com
profile:
phone: '1234567890'
gender: male
coach_type: Mentor
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Coach updated successfully'
data:
type: object
properties:
id:
type: integer
example: 1
user:
type: object
properties:
id:
type: integer
example: 1
first_name:
type: string
example: John
last_name:
type: string
example: Doe
email:
type: string
example: john@example.com
profile:
type: object
properties:
phone:
type: string
example: '1234567890'
gender:
type: string
example: male
coach_type:
type: string
example: Mentor
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Coach not found.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Coach not found.'
tags:
- 'Admin - Coach Management'
requestBody:
required: false
content:
multipart/form-data:
schema:
type: object
properties:
first_name:
type: string
description: "optional The coach's first name."
example: John
last_name:
type: string
description: "optional The coach's last name."
example: Doe
email:
type: string
description: "optional The coach's email address."
example: john@example.com
phone:
type: string
description: "optional The coach's phone number."
example: '1234567890'
phone_country_code_id:
type: integer
description: 'optional The phone country code ID.'
example: 1
gender:
type: string
description: "optional The coach's gender (male, female, other)."
example: male
coach_type:
type: string
description: 'optional The coach type (Mentor, Yoga Trainer).'
example: Mentor
notes:
type: string
description: 'Optional notes about the coach.'
example: 'Experienced mentor with 10 years of experience.'
nullable: true
profile_image:
type: string
format: binary
description: "optional The coach's profile image. Must be an image file (jpeg, png, jpg, gif) and not exceed 2MB."
security: []
delete:
summary: 'Delete a coach'
operationId: deleteACoach
description: 'Delete a coach account and all associated data. This will also delete the user account.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Coach deleted successfully'
data: []
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Coach deleted successfully'
data:
type: array
example: []
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Coach not found.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Coach not found.'
tags:
- 'Admin - Coach Management'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the coach.'
example: 1
required: true
schema:
type: integer
'/api/v1/admin/coach/{id}/verify':
post:
summary: 'Verify a coach (admin approval)'
operationId: verifyACoachadminApproval
description: 'Mark a coach as admin-verified so they can log into the coach portal.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Coach verified successfully. They can now log in.'
data: []
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Coach verified successfully. They can now log in.'
data:
type: array
example: []
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Coach not found.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Coach not found.'
tags:
- 'Admin - Coach Management'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the coach.'
example: 1
required: true
schema:
type: integer
/api/v1/admin/coach/global-commission-rate:
get:
summary: 'Get global commission rate'
operationId: getGlobalCommissionRate
description: 'Returns the current global commission rate (percentage) for coaches.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Global commission rate retrieved successfully'
data:
global_commission_rate: 10.5
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Global commission rate retrieved successfully'
data:
type: object
properties:
global_commission_rate:
type: number
example: 10.5
tags:
- 'Admin - Global Commission Rate (Coaches)'
security: []
put:
summary: 'Update global commission rate'
operationId: updateGlobalCommissionRate
description: "Update the global commission rate (percentage) for all coaches.\nValue must be between 0 and 100."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Global commission rate updated successfully'
data:
global_commission_rate: 10.5
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Global commission rate updated successfully'
data:
type: object
properties:
global_commission_rate:
type: number
example: 10.5
422:
description: ''
content:
text/plain:
schema:
type: string
example: '{"success":false,"message":"Validation failed","errors":{...}}'
tags:
- 'Admin - Global Commission Rate (Coaches)'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
global_commission_rate:
type: number
description: 'The commission rate as a percentage (0-100).'
example: 10.5
required:
- global_commission_rate
security: []
patch:
summary: 'Update global commission rate'
operationId: updateGlobalCommissionRate
description: "Update the global commission rate (percentage) for all coaches.\nValue must be between 0 and 100."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Global commission rate updated successfully'
data:
global_commission_rate: 10.5
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Global commission rate updated successfully'
data:
type: object
properties:
global_commission_rate:
type: number
example: 10.5
422:
description: ''
content:
text/plain:
schema:
type: string
example: '{"success":false,"message":"Validation failed","errors":{...}}'
tags:
- 'Admin - Global Commission Rate (Coaches)'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
global_commission_rate:
type: number
description: 'The commission rate as a percentage (0-100).'
example: 10.5
required:
- global_commission_rate
security: []
/api/v1/admin/contact:
get:
summary: 'Get list of all contact submissions'
operationId: getListOfAllContactSubmissions
description: 'Retrieve a paginated list of all contact form submissions.'
parameters:
-
in: query
name: page
description: 'The page number.'
example: 1
required: false
schema:
type: integer
description: 'The page number.'
example: 1
-
in: query
name: per_page
description: 'Number of items per page.'
example: 15
required: false
schema:
type: integer
description: 'Number of items per page.'
example: 15
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Contact submissions retrieved successfully'
data:
current_page: 1
data:
-
id: 1
name: 'John Doe'
email: john@example.com
phone: '1234567890'
phone_country_code:
id: 1
phone_code: '+1'
intl_dialing_prefix: '1'
message: 'I would like to know more about your services.'
created_at: '2026-01-28T06:05:31+00:00'
total: 10
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Contact submissions retrieved successfully'
data:
type: object
properties:
current_page:
type: integer
example: 1
data:
type: array
example:
-
id: 1
name: 'John Doe'
email: john@example.com
phone: '1234567890'
phone_country_code:
id: 1
phone_code: '+1'
intl_dialing_prefix: '1'
message: 'I would like to know more about your services.'
created_at: '2026-01-28T06:05:31+00:00'
items:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'John Doe'
email:
type: string
example: john@example.com
phone:
type: string
example: '1234567890'
phone_country_code:
type: object
properties:
id:
type: integer
example: 1
phone_code:
type: string
example: '+1'
intl_dialing_prefix:
type: string
example: '1'
message:
type: string
example: 'I would like to know more about your services.'
created_at:
type: string
example: '2026-01-28T06:05:31+00:00'
total:
type: integer
example: 10
tags:
- 'Admin - Contact Form Management'
security: []
'/api/v1/admin/contact/{id}':
get:
summary: 'Get a specific contact submission'
operationId: getASpecificContactSubmission
description: 'Retrieve detailed information about a specific contact submission.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Contact submission retrieved successfully'
data:
id: 1
name: 'John Doe'
email: john@example.com
phone: '1234567890'
phone_country_code:
id: 1
phone_code: '+1'
intl_dialing_prefix: '1'
message: 'I would like to know more about your services.'
created_at: '2026-01-28T06:05:31+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Contact submission retrieved successfully'
data:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'John Doe'
email:
type: string
example: john@example.com
phone:
type: string
example: '1234567890'
phone_country_code:
type: object
properties:
id:
type: integer
example: 1
phone_code:
type: string
example: '+1'
intl_dialing_prefix:
type: string
example: '1'
message:
type: string
example: 'I would like to know more about your services.'
created_at:
type: string
example: '2026-01-28T06:05:31+00:00'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Contact submission not found.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Contact submission not found.'
tags:
- 'Admin - Contact Form Management'
security: []
delete:
summary: 'Delete a contact submission'
operationId: deleteAContactSubmission
description: 'Delete a contact form submission.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Contact submission deleted successfully'
data: []
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Contact submission deleted successfully'
data:
type: array
example: []
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Contact submission not found.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Contact submission not found.'
tags:
- 'Admin - Contact Form Management'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the contact submission.'
example: 1
required: true
schema:
type: integer
/api/v1/contact:
post:
summary: 'Submit contact form'
operationId: submitContactForm
description: 'Submit a contact form with name, email, phone (with country code), and message.'
parameters: []
responses:
201:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Contact form submitted successfully'
data:
id: 1
name: 'John Doe'
email: john@example.com
phone: '1234567890'
phone_country_code:
id: 1
phone_code: '+1'
intl_dialing_prefix: '1'
message: 'I would like to know more about your services.'
created_at: '2026-01-28T06:05:31+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Contact form submitted successfully'
data:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'John Doe'
email:
type: string
example: john@example.com
phone:
type: string
example: '1234567890'
phone_country_code:
type: object
properties:
id:
type: integer
example: 1
phone_code:
type: string
example: '+1'
intl_dialing_prefix:
type: string
example: '1'
message:
type: string
example: 'I would like to know more about your services.'
created_at:
type: string
example: '2026-01-28T06:05:31+00:00'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
email:
- 'The email field is required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
email:
type: array
example:
- 'The email field is required.'
items:
type: string
tags:
- 'Contact Form'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: "The contact's name."
example: 'John Doe'
email:
type: string
description: "The contact's email address."
example: john@example.com
phone:
type: string
description: "The contact's phone number."
example: '1234567890'
phone_country_code_id:
type: integer
description: 'The phone country code ID.'
example: 1
message:
type: string
description: "The contact's message."
example: 'I would like to know more about your services.'
required:
- name
- email
- phone
- phone_country_code_id
- message
security: []
/api/v1/admin/coupon:
get:
summary: 'Get list of all coupons'
operationId: getListOfAllCoupons
description: 'Retrieve a paginated list of all coupons.'
parameters:
-
in: query
name: page
description: 'The page number.'
example: 1
required: false
schema:
type: integer
description: 'The page number.'
example: 1
-
in: query
name: per_page
description: 'Number of items per page.'
example: 15
required: false
schema:
type: integer
description: 'Number of items per page.'
example: 15
-
in: query
name: search
description: 'Optional search by code or name.'
example: WELCOME
required: false
schema:
type: string
description: 'Optional search by code or name.'
example: WELCOME
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Coupon Management'
security: []
post:
summary: 'Create a new coupon'
operationId: createANewCoupon
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Coupon Management'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
code:
type: string
description: 'Unique coupon code. Must not be greater than 50 characters.'
example: WELCOME10
name:
type: string
description: 'Human readable coupon name. Must not be greater than 255 characters.'
example: 'Welcome Discount'
type:
type: string
description: 'Coupon type: fixed amount or percentage.'
example: percentage
enum:
- fixed
- percentage
amount:
type: number
description: 'Discount amount (value or percentage based on type). Must be at least 0.01.'
example: 10.0
usage_limit_per_user:
type: integer
description: 'Maximum times a single user can use this coupon. Null means unlimited per user. Must be at least 1.'
example: 3
nullable: true
applies_to_all:
type: boolean
description: 'Whether coupon applies to all program categories.'
example: true
nullable: true
is_active:
type: boolean
description: 'Whether the coupon is currently active.'
example: true
nullable: true
starts_at:
type: string
description: 'Optional start date/time from which the coupon is valid. Must be a valid date.'
example: '2026-02-01T00:00:00+00:00'
nullable: true
ends_at:
type: string
description: 'Optional end date/time after which the coupon is no longer valid. Must be a valid date. Must be a date after or equal to starts_at.'
example: '2026-02-28T23:59:59+00:00'
nullable: true
program_category_ids:
type: array
description: 'The id of an existing record in the program_categories table.'
example:
- 16
items:
type: integer
required:
- code
- name
- type
- amount
security: []
'/api/v1/admin/coupon/{id}':
get:
summary: 'Get a specific coupon'
operationId: getASpecificCoupon
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Coupon Management'
security: []
put:
summary: 'Update a coupon'
operationId: updateACoupon
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Coupon Management'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
code:
type: string
description: 'Unique coupon code. Must not be greater than 50 characters.'
example: WELCOME10
name:
type: string
description: 'Human readable coupon name. Must not be greater than 255 characters.'
example: 'Welcome Discount'
type:
type: string
description: 'Coupon type: fixed amount or percentage.'
example: percentage
enum:
- fixed
- percentage
amount:
type: number
description: 'Discount amount (value or percentage based on type). Must be at least 0.01.'
example: 10.0
usage_limit_per_user:
type: integer
description: 'Maximum times a single user can use this coupon. Null means unlimited per user. Must be at least 1.'
example: 3
nullable: true
applies_to_all:
type: boolean
description: 'Whether coupon applies to all program categories.'
example: true
nullable: true
is_active:
type: boolean
description: 'Whether the coupon is currently active.'
example: true
nullable: true
starts_at:
type: string
description: 'Optional start date/time from which the coupon is valid. Must be a valid date.'
example: '2026-02-01T00:00:00+00:00'
nullable: true
ends_at:
type: string
description: 'Optional end date/time after which the coupon is no longer valid. Must be a valid date. Must be a date after or equal to starts_at.'
example: '2026-02-28T23:59:59+00:00'
nullable: true
program_category_ids:
type: array
description: 'The id of an existing record in the program_categories table.'
example:
- 16
items:
type: integer
security: []
patch:
summary: 'Update a coupon'
operationId: updateACoupon
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Coupon Management'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
code:
type: string
description: 'Unique coupon code. Must not be greater than 50 characters.'
example: WELCOME10
name:
type: string
description: 'Human readable coupon name. Must not be greater than 255 characters.'
example: 'Welcome Discount'
type:
type: string
description: 'Coupon type: fixed amount or percentage.'
example: percentage
enum:
- fixed
- percentage
amount:
type: number
description: 'Discount amount (value or percentage based on type). Must be at least 0.01.'
example: 10.0
usage_limit_per_user:
type: integer
description: 'Maximum times a single user can use this coupon. Null means unlimited per user. Must be at least 1.'
example: 3
nullable: true
applies_to_all:
type: boolean
description: 'Whether coupon applies to all program categories.'
example: true
nullable: true
is_active:
type: boolean
description: 'Whether the coupon is currently active.'
example: true
nullable: true
starts_at:
type: string
description: 'Optional start date/time from which the coupon is valid. Must be a valid date.'
example: '2026-02-01T00:00:00+00:00'
nullable: true
ends_at:
type: string
description: 'Optional end date/time after which the coupon is no longer valid. Must be a valid date. Must be a date after or equal to starts_at.'
example: '2026-02-28T23:59:59+00:00'
nullable: true
program_category_ids:
type: array
description: 'The id of an existing record in the program_categories table.'
example:
- 16
items:
type: integer
security: []
delete:
summary: 'Delete a coupon'
operationId: deleteACoupon
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Coupon Management'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the coupon.'
example: 1
required: true
schema:
type: integer
/api/v1/admin/customer:
get:
summary: 'Get list of all customers'
operationId: getListOfAllCustomers
description: 'Retrieve a paginated list of all customers with their profiles.'
parameters:
-
in: query
name: page
description: 'The page number.'
example: 1
required: false
schema:
type: integer
description: 'The page number.'
example: 1
-
in: query
name: per_page
description: 'Number of items per page.'
example: 15
required: false
schema:
type: integer
description: 'Number of items per page.'
example: 15
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Customers retrieved successfully'
data:
current_page: 1
data:
-
id: 1
user:
id: 1
first_name: John
last_name: Doe
email: john@example.com
profile:
phone: '1234567890'
phone_country_code:
id: 1
phone_code: '+1'
intl_dialing_prefix: '1'
total: 10
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Customers retrieved successfully'
data:
type: object
properties:
current_page:
type: integer
example: 1
data:
type: array
example:
-
id: 1
user:
id: 1
first_name: John
last_name: Doe
email: john@example.com
profile:
phone: '1234567890'
phone_country_code:
id: 1
phone_code: '+1'
intl_dialing_prefix: '1'
items:
type: object
properties:
id:
type: integer
example: 1
user:
type: object
properties:
id:
type: integer
example: 1
first_name:
type: string
example: John
last_name:
type: string
example: Doe
email:
type: string
example: john@example.com
profile:
type: object
properties:
phone:
type: string
example: '1234567890'
phone_country_code:
type: object
properties:
id:
type: integer
example: 1
phone_code:
type: string
example: '+1'
intl_dialing_prefix:
type: string
example: '1'
total:
type: integer
example: 10
tags:
- 'Admin - Customer Management'
security: []
post:
summary: 'Create a new customer'
operationId: createANewCustomer
description: "Create a new customer account with profile information. An email will be sent to the customer with their login credentials.\nThe customer's email is marked as verified by default because the account is created by an admin."
parameters: []
responses: { }
tags:
- 'Admin - Customer Management'
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
first_name:
type: string
description: "The customer's first name. Must not be greater than 255 characters."
example: John
last_name:
type: string
description: "The customer's last name. Must not be greater than 255 characters."
example: Doe
email:
type: string
description: "The customer's email address. Must be a valid email address. Must not be greater than 255 characters."
example: john@example.com
phone:
type: string
description: "The customer's phone number. Must not be greater than 20 characters."
example: '1234567890'
phone_country_code_id:
type: integer
description: 'The phone country code ID. The id of an existing record in the phone_country_codes table.'
example: 1
password:
type: string
description: "The customer's password. Must be at least 8 characters."
example: password123
notes:
type: string
description: 'Optional notes about the customer.'
example: 'VIP customer with special requirements.'
nullable: true
address_line_1:
type: string
description: "The customer's primary address line. Must not be greater than 255 characters."
example: '123 Main Street'
nullable: true
address_line_2:
type: string
description: "The customer's secondary address line. Must not be greater than 255 characters."
example: 'Apt 4B'
nullable: true
landmark:
type: string
description: 'A nearby landmark. Must not be greater than 255 characters.'
example: 'Near Central Park'
nullable: true
country_id:
type: string
description: 'The ID of the country. The id of an existing record in the countries table.'
example: 1
nullable: true
state_id:
type: string
description: 'The ID of the state. The id of an existing record in the states table.'
example: 1
nullable: true
city_id:
type: string
description: 'The ID of the city. The id of an existing record in the cities table.'
example: 1
nullable: true
postal_code:
type: string
description: 'The postal or zip code. Must not be greater than 20 characters.'
example: '12345'
nullable: true
profile_image:
type: string
format: binary
description: "The customer's profile image. Must be an image file (jpeg, png, jpg, gif) and not exceed 2MB. Must be an image. Must not be greater than 2048 kilobytes."
nullable: true
required:
- first_name
- last_name
- email
- phone
- phone_country_code_id
- password
security: []
'/api/v1/admin/customer/{id}':
get:
summary: 'Get a specific customer'
operationId: getASpecificCustomer
description: 'Retrieve detailed information about a specific customer.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Customer retrieved successfully'
data:
id: 1
user:
id: 1
first_name: John
last_name: Doe
email: john@example.com
profile:
phone: '1234567890'
phone_country_code:
id: 1
phone_code: '+1'
intl_dialing_prefix: '1'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Customer retrieved successfully'
data:
type: object
properties:
id:
type: integer
example: 1
user:
type: object
properties:
id:
type: integer
example: 1
first_name:
type: string
example: John
last_name:
type: string
example: Doe
email:
type: string
example: john@example.com
profile:
type: object
properties:
phone:
type: string
example: '1234567890'
phone_country_code:
type: object
properties:
id:
type: integer
example: 1
phone_code:
type: string
example: '+1'
intl_dialing_prefix:
type: string
example: '1'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Customer not found.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Customer not found.'
tags:
- 'Admin - Customer Management'
security: []
put:
summary: 'Update a customer'
operationId: updateACustomer
description: 'Update customer information and profile details.'
parameters: []
responses: { }
tags:
- 'Admin - Customer Management'
requestBody:
required: false
content:
multipart/form-data:
schema:
type: object
properties:
first_name:
type: string
description: "The customer's first name. Must not be greater than 255 characters."
example: John
last_name:
type: string
description: "The customer's last name. Must not be greater than 255 characters."
example: Doe
email:
type: string
description: "The customer's email address. Must be a valid email address. Must not be greater than 255 characters."
example: john@example.com
phone:
type: string
description: "The customer's phone number. Must not be greater than 20 characters."
example: '1234567890'
phone_country_code_id:
type: integer
description: 'The phone country code ID. The id of an existing record in the phone_country_codes table.'
example: 1
notes:
type: string
description: 'Optional notes about the customer.'
example: 'VIP customer with special requirements.'
nullable: true
address_line_1:
type: string
description: "The customer's primary address line. Must not be greater than 255 characters."
example: '123 Main Street'
nullable: true
address_line_2:
type: string
description: "The customer's secondary address line. Must not be greater than 255 characters."
example: 'Apt 4B'
nullable: true
landmark:
type: string
description: 'A nearby landmark. Must not be greater than 255 characters.'
example: 'Near Central Park'
nullable: true
country_id:
type: string
description: 'The ID of the country. The id of an existing record in the countries table.'
example: 1
nullable: true
state_id:
type: string
description: 'The ID of the state. The id of an existing record in the states table.'
example: 1
nullable: true
city_id:
type: string
description: 'The ID of the city. The id of an existing record in the cities table.'
example: 1
nullable: true
postal_code:
type: string
description: 'The postal or zip code. Must not be greater than 20 characters.'
example: '12345'
nullable: true
profile_image:
type: string
format: binary
description: "The customer's profile image. Must be an image file (jpeg, png, jpg, gif) and not exceed 2MB. Must be an image. Must not be greater than 2048 kilobytes."
nullable: true
security: []
patch:
summary: 'Update a customer'
operationId: updateACustomer
description: 'Update customer information and profile details.'
parameters: []
responses: { }
tags:
- 'Admin - Customer Management'
requestBody:
required: false
content:
multipart/form-data:
schema:
type: object
properties:
first_name:
type: string
description: "The customer's first name. Must not be greater than 255 characters."
example: John
last_name:
type: string
description: "The customer's last name. Must not be greater than 255 characters."
example: Doe
email:
type: string
description: "The customer's email address. Must be a valid email address. Must not be greater than 255 characters."
example: john@example.com
phone:
type: string
description: "The customer's phone number. Must not be greater than 20 characters."
example: '1234567890'
phone_country_code_id:
type: integer
description: 'The phone country code ID. The id of an existing record in the phone_country_codes table.'
example: 1
notes:
type: string
description: 'Optional notes about the customer.'
example: 'VIP customer with special requirements.'
nullable: true
address_line_1:
type: string
description: "The customer's primary address line. Must not be greater than 255 characters."
example: '123 Main Street'
nullable: true
address_line_2:
type: string
description: "The customer's secondary address line. Must not be greater than 255 characters."
example: 'Apt 4B'
nullable: true
landmark:
type: string
description: 'A nearby landmark. Must not be greater than 255 characters.'
example: 'Near Central Park'
nullable: true
country_id:
type: string
description: 'The ID of the country. The id of an existing record in the countries table.'
example: 1
nullable: true
state_id:
type: string
description: 'The ID of the state. The id of an existing record in the states table.'
example: 1
nullable: true
city_id:
type: string
description: 'The ID of the city. The id of an existing record in the cities table.'
example: 1
nullable: true
postal_code:
type: string
description: 'The postal or zip code. Must not be greater than 20 characters.'
example: '12345'
nullable: true
profile_image:
type: string
format: binary
description: "The customer's profile image. Must be an image file (jpeg, png, jpg, gif) and not exceed 2MB. Must be an image. Must not be greater than 2048 kilobytes."
nullable: true
security: []
delete:
summary: 'Delete a customer'
operationId: deleteACustomer
description: 'Delete a customer account and all associated data. This will also delete the user account.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Customer deleted successfully'
data: []
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Customer deleted successfully'
data:
type: array
example: []
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Customer not found.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Customer not found.'
tags:
- 'Admin - Customer Management'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the customer.'
example: 1
required: true
schema:
type: integer
/api/v1/admin/dispute:
get:
summary: ''
operationId: getApiV1AdminDispute
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Disputes'
security: []
'/api/v1/admin/dispute/{id}':
get:
summary: ''
operationId: getApiV1AdminDisputeId
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Disputes'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the dispute.'
example: architecto
required: true
schema:
type: string
'/api/v1/admin/dispute/{id}/status':
patch:
summary: ''
operationId: patchApiV1AdminDisputeIdStatus
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Disputes'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
status:
type: string
description: 'Auto-generated from validation rules for `status`.'
example: closed
enum:
- open
- closed
required:
- status
security: []
parameters:
-
in: path
name: id
description: 'The ID of the dispute.'
example: architecto
required: true
schema:
type: string
/api/v1/admin/faq:
get:
summary: 'Get list of FAQs'
operationId: getListOfFAQs
description: 'Optionally filter by page_type (mentee|mentor) and is_active.'
parameters:
-
in: query
name: page_type
description: 'optional Filter by page type.'
example: mentee
required: false
schema:
type: string
description: 'optional Filter by page type.'
example: mentee
-
in: query
name: is_active
description: 'optional Filter by active status.'
example: true
required: false
schema:
type: boolean
description: 'optional Filter by active status.'
example: true
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - FAQ Management'
security: []
post:
summary: 'Create a new FAQ'
operationId: createANewFAQ
description: ''
parameters: []
responses: { }
tags:
- 'Admin - FAQ Management'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
page_type:
type: string
description: 'Page type. Allowed: mentee, mentor.'
example: mentee
heading:
type: string
description: 'FAQ heading.'
example: 'What is a mentee?'
description:
type: string
description: 'FAQ description.'
example: 'A mentee is...'
is_active:
type: boolean
description: 'optional Whether the FAQ is active. Default true.'
example: true
nullable: true
sort_order:
type: integer
description: 'optional Sort order within the page.'
example: 1
nullable: true
required:
- page_type
- heading
- description
security: []
'/api/v1/admin/faq/{id}':
get:
summary: 'Get a specific FAQ'
operationId: getASpecificFAQ
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - FAQ Management'
security: []
put:
summary: 'Update an existing FAQ'
operationId: updateAnExistingFAQ
description: ''
parameters: []
responses: { }
tags:
- 'Admin - FAQ Management'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
page_type:
type: string
description: 'optional Page type. Allowed: mentee, mentor.'
example: mentor
heading:
type: string
description: 'optional FAQ heading.'
example: architecto
description:
type: string
description: 'optional FAQ description.'
example: 'Eius et animi quos velit et.'
is_active:
type: boolean
description: 'optional Whether the FAQ is active.'
example: false
nullable: true
sort_order:
type: integer
description: 'optional Sort order within the page.'
example: 16
nullable: true
security: []
patch:
summary: 'Update an existing FAQ'
operationId: updateAnExistingFAQ
description: ''
parameters: []
responses: { }
tags:
- 'Admin - FAQ Management'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
page_type:
type: string
description: 'optional Page type. Allowed: mentee, mentor.'
example: mentor
heading:
type: string
description: 'optional FAQ heading.'
example: architecto
description:
type: string
description: 'optional FAQ description.'
example: 'Eius et animi quos velit et.'
is_active:
type: boolean
description: 'optional Whether the FAQ is active.'
example: false
nullable: true
sort_order:
type: integer
description: 'optional Sort order within the page.'
example: 16
nullable: true
security: []
delete:
summary: 'Delete an FAQ'
operationId: deleteAnFAQ
description: ''
parameters: []
responses: { }
tags:
- 'Admin - FAQ Management'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the FAQ.'
example: 1
required: true
schema:
type: integer
'/api/v1/faq/{page_type}':
get:
summary: 'Get FAQs for a given page type'
operationId: getFAQsForAGivenPageType
description: 'Returns all active FAQs for the specified page (mentee or mentor), ordered by sort_order and id.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'FAQs retrieved successfully'
data: []
properties:
success:
type: boolean
example: true
message:
type: string
example: 'FAQs retrieved successfully'
data:
type: array
example: []
tags:
- 'FAQ (Public)'
security: []
parameters:
-
in: path
name: page_type
description: 'The page type. Allowed: mentee, mentor.'
example: mentee
required: true
schema:
type: string
/api/v1/admin/goal-type:
get:
summary: 'Get list of all goal types'
operationId: getListOfAllGoalTypes
description: ''
parameters:
-
in: query
name: page
description: 'The page number.'
example: 1
required: false
schema:
type: integer
description: 'The page number.'
example: 1
-
in: query
name: per_page
description: 'Number of items per page.'
example: 15
required: false
schema:
type: integer
description: 'Number of items per page.'
example: 15
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Goal Type Management'
security: []
post:
summary: 'Create a new goal type'
operationId: createANewGoalType
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Goal Type Management'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The goal type name.'
example: Fitness
required:
- name
security: []
'/api/v1/admin/goal-type/{id}':
get:
summary: 'Get a specific goal type'
operationId: getASpecificGoalType
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Goal Type Management'
security: []
put:
summary: 'Update a goal type'
operationId: updateAGoalType
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Goal Type Management'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The goal type name.'
example: Fitness
required:
- name
security: []
patch:
summary: 'Update a goal type'
operationId: updateAGoalType
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Goal Type Management'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The goal type name.'
example: Fitness
required:
- name
security: []
delete:
summary: 'Delete a goal type'
operationId: deleteAGoalType
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Goal Type Management'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the goal type.'
example: 1
required: true
schema:
type: integer
/api/v1/admin/habit-type:
get:
summary: 'Get list of all habit types'
operationId: getListOfAllHabitTypes
description: ''
parameters:
-
in: query
name: page
description: 'The page number.'
example: 1
required: false
schema:
type: integer
description: 'The page number.'
example: 1
-
in: query
name: per_page
description: 'Number of items per page.'
example: 15
required: false
schema:
type: integer
description: 'Number of items per page.'
example: 15
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Habit Type Management'
security: []
post:
summary: 'Create a new habit type'
operationId: createANewHabitType
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Habit Type Management'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The habit type name.'
example: 'Daily Exercise'
required:
- name
security: []
'/api/v1/admin/habit-type/{id}':
get:
summary: 'Get a specific habit type'
operationId: getASpecificHabitType
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Habit Type Management'
security: []
put:
summary: 'Update a habit type'
operationId: updateAHabitType
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Habit Type Management'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The habit type name.'
example: 'Daily Exercise'
required:
- name
security: []
patch:
summary: 'Update a habit type'
operationId: updateAHabitType
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Habit Type Management'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The habit type name.'
example: 'Daily Exercise'
required:
- name
security: []
delete:
summary: 'Delete a habit type'
operationId: deleteAHabitType
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Habit Type Management'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the habit type.'
example: 1
required: true
schema:
type: integer
/api/v1/admin/home-page:
get:
summary: 'Get home page data (admin)'
operationId: getHomePageDataadmin
description: 'Returns the full home page content for editing.'
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Home Page (CMS)'
security: []
put:
summary: 'Update home page'
operationId: updateHomePage
description: 'Update any section. All sections are optional. Use multipart/form-data for image uploads.'
parameters: []
responses: { }
tags:
- 'Admin - Home Page (CMS)'
requestBody:
required: false
content:
multipart/form-data:
schema:
type: object
properties:
section_01:
type: object
description: 'Auto-generated from validation rules for `section_01`.'
example: null
properties:
hero_headline:
type: string
description: 'Auto-generated from validation rules for `section_01.hero_headline`. Must not be greater than 255 characters.'
example: b
nullable: true
hero_section_image:
type: string
format: binary
description: 'Auto-generated from validation rules for `section_01.hero_section_image`. Must be an image. Must not be greater than 2048 kilobytes.'
nullable: true
hero_description:
type: string
description: 'Auto-generated from validation rules for `section_01.hero_description`. Must not be greater than 5000 characters.'
example: 'n'
nullable: true
nullable: true
section_02:
type: object
description: 'Auto-generated from validation rules for `section_02`.'
example: null
properties:
headline:
type: string
description: 'Auto-generated from validation rules for `section_02.headline`. Must not be greater than 255 characters.'
example: g
nullable: true
about_us_section_image:
type: string
format: binary
description: 'Auto-generated from validation rules for `section_02.about_us_section_image`. Must be an image. Must not be greater than 2048 kilobytes.'
nullable: true
secondary_headline:
type: string
description: 'Auto-generated from validation rules for `section_02.secondary_headline`. Must not be greater than 255 characters.'
example: z
nullable: true
description:
type: string
description: 'Auto-generated from validation rules for `section_02.description`. Must not be greater than 10000 characters.'
example: 'Velit et fugiat sunt nihil accusantium.'
nullable: true
button_name:
type: string
description: 'Auto-generated from validation rules for `section_02.button_name`. Must not be greater than 100 characters.'
example: 'n'
nullable: true
button_url:
type: string
description: 'Auto-generated from validation rules for `section_02.button_url`. Must be a valid URL. Must not be greater than 500 characters.'
example: 'https://www.runte.com/ab-provident-perspiciatis-quo-omnis-nostrum-aut-adipisci'
nullable: true
nullable: true
section_03:
type: object
description: 'Auto-generated from validation rules for `section_03`.'
example: null
properties:
headline:
type: string
description: 'Auto-generated from validation rules for `section_03.headline`. Must not be greater than 255 characters.'
example: p
nullable: true
secondary_headline:
type: string
description: 'Auto-generated from validation rules for `section_03.secondary_headline`. Must not be greater than 255 characters.'
example: w
nullable: true
nullable: true
section_04:
type: object
description: 'Auto-generated from validation rules for `section_04`.'
example: null
properties:
headline:
type: string
description: 'Auto-generated from validation rules for `section_04.headline`. Must not be greater than 255 characters.'
example: l
nullable: true
secondary_headline:
type: string
description: 'Auto-generated from validation rules for `section_04.secondary_headline`. Must not be greater than 255 characters.'
example: v
nullable: true
why_choose_us_section_image:
type: string
format: binary
description: 'Auto-generated from validation rules for `section_04.why_choose_us_section_image`. Must be an image. Must not be greater than 2048 kilobytes.'
nullable: true
background_image:
type: string
format: binary
description: 'Auto-generated from validation rules for `section_04.background_image`. Must be an image. Must not be greater than 2048 kilobytes.'
nullable: true
options:
type: array
description: 'Auto-generated from validation rules for `section_04.options`.'
example: null
items:
type: object
nullable: true
properties:
id:
type: integer
description: 'Auto-generated from validation rules for `section_04.options.*.id`. The id of an existing record in the home_why_choose_us_options table.'
example: 16
nullable: true
title:
type: string
description: 'Auto-generated from validation rules for `section_04.options.*.title`. Must not be greater than 255 characters.'
example: 'n'
nullable: true
description:
type: string
description: 'Auto-generated from validation rules for `section_04.options.*.description`. Must not be greater than 2000 characters.'
example: 'Animi quos velit et fugiat.'
nullable: true
sort_order:
type: integer
description: 'Auto-generated from validation rules for `section_04.options.*.sort_order`. Must be at least 0.'
example: 42
nullable: true
nullable: true
section_05:
type: object
description: 'Auto-generated from validation rules for `section_05`.'
example: null
properties:
headline:
type: string
description: 'Auto-generated from validation rules for `section_05.headline`. Must not be greater than 255 characters.'
example: q
nullable: true
secondary_headline:
type: string
description: 'Auto-generated from validation rules for `section_05.secondary_headline`. Must not be greater than 255 characters.'
example: w
nullable: true
nullable: true
section_06:
type: object
description: 'Auto-generated from validation rules for `section_06`.'
example: null
properties:
headline:
type: string
description: 'Auto-generated from validation rules for `section_06.headline`. Must not be greater than 255 characters.'
example: r
nullable: true
secondary_headline:
type: string
description: 'Auto-generated from validation rules for `section_06.secondary_headline`. Must not be greater than 255 characters.'
example: s
nullable: true
nullable: true
security: []
patch:
summary: 'Update home page'
operationId: updateHomePage
description: 'Update any section. All sections are optional. Use multipart/form-data for image uploads.'
parameters: []
responses: { }
tags:
- 'Admin - Home Page (CMS)'
requestBody:
required: false
content:
multipart/form-data:
schema:
type: object
properties:
section_01:
type: object
description: 'Auto-generated from validation rules for `section_01`.'
example: null
properties:
hero_headline:
type: string
description: 'Auto-generated from validation rules for `section_01.hero_headline`. Must not be greater than 255 characters.'
example: b
nullable: true
hero_section_image:
type: string
format: binary
description: 'Auto-generated from validation rules for `section_01.hero_section_image`. Must be an image. Must not be greater than 2048 kilobytes.'
nullable: true
hero_description:
type: string
description: 'Auto-generated from validation rules for `section_01.hero_description`. Must not be greater than 5000 characters.'
example: 'n'
nullable: true
nullable: true
section_02:
type: object
description: 'Auto-generated from validation rules for `section_02`.'
example: null
properties:
headline:
type: string
description: 'Auto-generated from validation rules for `section_02.headline`. Must not be greater than 255 characters.'
example: g
nullable: true
about_us_section_image:
type: string
format: binary
description: 'Auto-generated from validation rules for `section_02.about_us_section_image`. Must be an image. Must not be greater than 2048 kilobytes.'
nullable: true
secondary_headline:
type: string
description: 'Auto-generated from validation rules for `section_02.secondary_headline`. Must not be greater than 255 characters.'
example: z
nullable: true
description:
type: string
description: 'Auto-generated from validation rules for `section_02.description`. Must not be greater than 10000 characters.'
example: 'Velit et fugiat sunt nihil accusantium.'
nullable: true
button_name:
type: string
description: 'Auto-generated from validation rules for `section_02.button_name`. Must not be greater than 100 characters.'
example: 'n'
nullable: true
button_url:
type: string
description: 'Auto-generated from validation rules for `section_02.button_url`. Must be a valid URL. Must not be greater than 500 characters.'
example: 'https://www.runte.com/ab-provident-perspiciatis-quo-omnis-nostrum-aut-adipisci'
nullable: true
nullable: true
section_03:
type: object
description: 'Auto-generated from validation rules for `section_03`.'
example: null
properties:
headline:
type: string
description: 'Auto-generated from validation rules for `section_03.headline`. Must not be greater than 255 characters.'
example: p
nullable: true
secondary_headline:
type: string
description: 'Auto-generated from validation rules for `section_03.secondary_headline`. Must not be greater than 255 characters.'
example: w
nullable: true
nullable: true
section_04:
type: object
description: 'Auto-generated from validation rules for `section_04`.'
example: null
properties:
headline:
type: string
description: 'Auto-generated from validation rules for `section_04.headline`. Must not be greater than 255 characters.'
example: l
nullable: true
secondary_headline:
type: string
description: 'Auto-generated from validation rules for `section_04.secondary_headline`. Must not be greater than 255 characters.'
example: v
nullable: true
why_choose_us_section_image:
type: string
format: binary
description: 'Auto-generated from validation rules for `section_04.why_choose_us_section_image`. Must be an image. Must not be greater than 2048 kilobytes.'
nullable: true
background_image:
type: string
format: binary
description: 'Auto-generated from validation rules for `section_04.background_image`. Must be an image. Must not be greater than 2048 kilobytes.'
nullable: true
options:
type: array
description: 'Auto-generated from validation rules for `section_04.options`.'
example: null
items:
type: object
nullable: true
properties:
id:
type: integer
description: 'Auto-generated from validation rules for `section_04.options.*.id`. The id of an existing record in the home_why_choose_us_options table.'
example: 16
nullable: true
title:
type: string
description: 'Auto-generated from validation rules for `section_04.options.*.title`. Must not be greater than 255 characters.'
example: 'n'
nullable: true
description:
type: string
description: 'Auto-generated from validation rules for `section_04.options.*.description`. Must not be greater than 2000 characters.'
example: 'Animi quos velit et fugiat.'
nullable: true
sort_order:
type: integer
description: 'Auto-generated from validation rules for `section_04.options.*.sort_order`. Must be at least 0.'
example: 42
nullable: true
nullable: true
section_05:
type: object
description: 'Auto-generated from validation rules for `section_05`.'
example: null
properties:
headline:
type: string
description: 'Auto-generated from validation rules for `section_05.headline`. Must not be greater than 255 characters.'
example: q
nullable: true
secondary_headline:
type: string
description: 'Auto-generated from validation rules for `section_05.secondary_headline`. Must not be greater than 255 characters.'
example: w
nullable: true
nullable: true
section_06:
type: object
description: 'Auto-generated from validation rules for `section_06`.'
example: null
properties:
headline:
type: string
description: 'Auto-generated from validation rules for `section_06.headline`. Must not be greater than 255 characters.'
example: r
nullable: true
secondary_headline:
type: string
description: 'Auto-generated from validation rules for `section_06.secondary_headline`. Must not be greater than 255 characters.'
example: s
nullable: true
nullable: true
security: []
/api/v1/home-page:
get:
summary: 'Get home page'
operationId: getHomePage
description: 'Returns all home page sections: Hero, About Us, Programs, Why Choose Us, Coaches, Articles.'
parameters: []
responses:
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Home page not found.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Home page not found.'
tags:
- 'Home Page (Public)'
security: []
/api/v1/admin/intermediate-steps/values:
get:
summary: 'Get Values Intermediate Page content (admin)'
operationId: getValuesIntermediatePageContentadmin
description: 'Returns the headline and all points for editing.'
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Values Intermediate Page (Intermediate Steps)'
security: []
put:
summary: 'Update Values Intermediate Page'
operationId: updateValuesIntermediatePage
description: "Update headline and/or points. Send full points array to replace; existing points\ncan be updated by id, new points without id will be created."
parameters: []
responses: { }
tags:
- 'Admin - Values Intermediate Page (Intermediate Steps)'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
headline:
type: string
description: 'Page headline.'
example: architecto
points:
type: array
description: 'optional Array of points (description, sort_order). Include id to update existing. Order = display order.'
example:
- architecto
items:
type: string
nullable: true
required:
- headline
security: []
patch:
summary: 'Update Values Intermediate Page'
operationId: updateValuesIntermediatePage
description: "Update headline and/or points. Send full points array to replace; existing points\ncan be updated by id, new points without id will be created."
parameters: []
responses: { }
tags:
- 'Admin - Values Intermediate Page (Intermediate Steps)'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
headline:
type: string
description: 'Page headline.'
example: architecto
points:
type: array
description: 'optional Array of points (description, sort_order). Include id to update existing. Order = display order.'
example:
- architecto
items:
type: string
nullable: true
required:
- headline
security: []
/api/v1/admin/intermediate-steps/y-method:
get:
summary: 'Get The Y Method Page content (admin)'
operationId: getTheYMethodPageContentadmin
description: 'Returns the headline and all steps for editing.'
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - The Y Method Page (Intermediate Steps)'
security: []
put:
summary: 'Update The Y Method Page'
operationId: updateTheYMethodPage
description: "Update headline and/or steps. Send full steps array to replace; existing steps\ncan be updated by id, new steps without id will be created."
parameters: []
responses: { }
tags:
- 'Admin - The Y Method Page (Intermediate Steps)'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
headline:
type: string
description: 'Page headline.'
example: architecto
steps:
type: array
description: 'optional Array of steps (description, sort_order). Include id to update existing. Order = display order.'
example:
- architecto
items:
type: string
nullable: true
required:
- headline
security: []
patch:
summary: 'Update The Y Method Page'
operationId: updateTheYMethodPage
description: "Update headline and/or steps. Send full steps array to replace; existing steps\ncan be updated by id, new steps without id will be created."
parameters: []
responses: { }
tags:
- 'Admin - The Y Method Page (Intermediate Steps)'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
headline:
type: string
description: 'Page headline.'
example: architecto
steps:
type: array
description: 'optional Array of steps (description, sort_order). Include id to update existing. Order = display order.'
example:
- architecto
items:
type: string
nullable: true
required:
- headline
security: []
/api/v1/admin/intermediate-steps/eight-most-common-mistakes:
get:
summary: 'Get Eight most common mistakes page content (admin)'
operationId: getEightMostCommonMistakesPageContentadmin
description: 'Returns the headline and all mistakes for editing.'
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Eight most common mistakes Intermediate Page'
security: []
put:
summary: 'Update Eight most common mistakes page'
operationId: updateEightMostCommonMistakesPage
description: "Update headline and/or mistakes. Send full mistakes array to replace; existing\nitems can be updated by id, new items without id will be created."
parameters: []
responses: { }
tags:
- 'Admin - Eight most common mistakes Intermediate Page'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
headline:
type: string
description: 'Page headline.'
example: architecto
mistakes:
type: array
description: 'optional Array of mistakes (description, sort_order). Include id to update existing.'
example:
- architecto
items:
type: string
nullable: true
required:
- headline
security: []
patch:
summary: 'Update Eight most common mistakes page'
operationId: updateEightMostCommonMistakesPage
description: "Update headline and/or mistakes. Send full mistakes array to replace; existing\nitems can be updated by id, new items without id will be created."
parameters: []
responses: { }
tags:
- 'Admin - Eight most common mistakes Intermediate Page'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
headline:
type: string
description: 'Page headline.'
example: architecto
mistakes:
type: array
description: 'optional Array of mistakes (description, sort_order). Include id to update existing.'
example:
- architecto
items:
type: string
nullable: true
required:
- headline
security: []
/api/v1/admin/intermediate-steps/goal-settings:
get:
summary: 'Get Goal Settings Intermediate Page content (admin)'
operationId: getGoalSettingsIntermediatePageContentadmin
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Goal Settings Intermediate Page'
security: []
put:
summary: 'Update Goal Settings Intermediate Page'
operationId: updateGoalSettingsIntermediatePage
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Goal Settings Intermediate Page'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
headline:
type: string
description: 'Page headline.'
example: architecto
quote:
type: string
description: 'optional Quote.'
example: architecto
nullable: true
sub_heading_1:
type: string
description: 'optional Sub-heading 1.'
example: architecto
nullable: true
sub_heading_2:
type: string
description: 'optional Sub-heading 2.'
example: architecto
nullable: true
description_2:
type: string
description: 'optional Description 2 (long text).'
example: architecto
nullable: true
options:
type: array
description: 'optional Array of options (description, sort_order). Include id to update existing.'
example:
- architecto
items:
type: string
nullable: true
required:
- headline
security: []
patch:
summary: 'Update Goal Settings Intermediate Page'
operationId: updateGoalSettingsIntermediatePage
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Goal Settings Intermediate Page'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
headline:
type: string
description: 'Page headline.'
example: architecto
quote:
type: string
description: 'optional Quote.'
example: architecto
nullable: true
sub_heading_1:
type: string
description: 'optional Sub-heading 1.'
example: architecto
nullable: true
sub_heading_2:
type: string
description: 'optional Sub-heading 2.'
example: architecto
nullable: true
description_2:
type: string
description: 'optional Description 2 (long text).'
example: architecto
nullable: true
options:
type: array
description: 'optional Array of options (description, sort_order). Include id to update existing.'
example:
- architecto
items:
type: string
nullable: true
required:
- headline
security: []
/api/v1/admin/intermediate-steps/questions-goal-why:
get:
summary: 'Get Questions for each goal - why? page content (admin)'
operationId: getQuestionsForEachGoalWhyPageContentadmin
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Questions for each goal - why? Intermediate Page'
security: []
put:
summary: 'Update Questions for each goal - why? page'
operationId: updateQuestionsForEachGoalWhyPage
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Questions for each goal - why? Intermediate Page'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
headline_1:
type: string
description: 'Auto-generated from validation rules for `headline_1`. Must not be greater than 255 characters.'
example: b
nullable: true
headline_2:
type: string
description: 'Auto-generated from validation rules for `headline_2`. Must not be greater than 255 characters.'
example: 'n'
nullable: true
headline_3:
type: string
description: 'Auto-generated from validation rules for `headline_3`. Must not be greater than 255 characters.'
example: g
nullable: true
headline_4:
type: string
description: 'Auto-generated from validation rules for `headline_4`. Must not be greater than 255 characters.'
example: z
nullable: true
headline_5:
type: string
description: 'Auto-generated from validation rules for `headline_5`. Must not be greater than 255 characters.'
example: m
nullable: true
question_heading_1:
type: string
description: 'Auto-generated from validation rules for `question_heading_1`. Must not be greater than 255 characters.'
example: i
nullable: true
question_description_1:
type: string
description: 'Auto-generated from validation rules for `question_description_1`. Must not be greater than 5000 characters.'
example: 'y'
nullable: true
question_heading_2:
type: string
description: 'Auto-generated from validation rules for `question_heading_2`. Must not be greater than 255 characters.'
example: v
nullable: true
question_description_2:
type: string
description: 'Auto-generated from validation rules for `question_description_2`. Must not be greater than 5000 characters.'
example: d
nullable: true
question_heading_3:
type: string
description: 'Auto-generated from validation rules for `question_heading_3`. Must not be greater than 255 characters.'
example: l
nullable: true
question_description_3:
type: string
description: 'Auto-generated from validation rules for `question_description_3`. Must not be greater than 5000 characters.'
example: j
nullable: true
quote:
type: string
description: 'Auto-generated from validation rules for `quote`. Must not be greater than 2000 characters.'
example: 'n'
nullable: true
security: []
patch:
summary: 'Update Questions for each goal - why? page'
operationId: updateQuestionsForEachGoalWhyPage
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Questions for each goal - why? Intermediate Page'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
headline_1:
type: string
description: 'Auto-generated from validation rules for `headline_1`. Must not be greater than 255 characters.'
example: b
nullable: true
headline_2:
type: string
description: 'Auto-generated from validation rules for `headline_2`. Must not be greater than 255 characters.'
example: 'n'
nullable: true
headline_3:
type: string
description: 'Auto-generated from validation rules for `headline_3`. Must not be greater than 255 characters.'
example: g
nullable: true
headline_4:
type: string
description: 'Auto-generated from validation rules for `headline_4`. Must not be greater than 255 characters.'
example: z
nullable: true
headline_5:
type: string
description: 'Auto-generated from validation rules for `headline_5`. Must not be greater than 255 characters.'
example: m
nullable: true
question_heading_1:
type: string
description: 'Auto-generated from validation rules for `question_heading_1`. Must not be greater than 255 characters.'
example: i
nullable: true
question_description_1:
type: string
description: 'Auto-generated from validation rules for `question_description_1`. Must not be greater than 5000 characters.'
example: 'y'
nullable: true
question_heading_2:
type: string
description: 'Auto-generated from validation rules for `question_heading_2`. Must not be greater than 255 characters.'
example: v
nullable: true
question_description_2:
type: string
description: 'Auto-generated from validation rules for `question_description_2`. Must not be greater than 5000 characters.'
example: d
nullable: true
question_heading_3:
type: string
description: 'Auto-generated from validation rules for `question_heading_3`. Must not be greater than 255 characters.'
example: l
nullable: true
question_description_3:
type: string
description: 'Auto-generated from validation rules for `question_description_3`. Must not be greater than 5000 characters.'
example: j
nullable: true
quote:
type: string
description: 'Auto-generated from validation rules for `quote`. Must not be greater than 2000 characters.'
example: 'n'
nullable: true
security: []
/api/v1/intermediate-steps/values:
get:
summary: 'Get Values Intermediate Page content (public)'
operationId: getValuesIntermediatePageContentpublic
description: 'Returns the headline and points for display.'
parameters: []
responses:
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Values Intermediate Page not found.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Values Intermediate Page not found.'
tags:
- 'Intermediate Steps - Values Page (Public)'
security: []
/api/v1/intermediate-steps/y-method:
get:
summary: 'Get The Y Method Page content (public)'
operationId: getTheYMethodPageContentpublic
description: 'Returns the headline and steps for display.'
parameters: []
responses:
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'The Y Method Page not found.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'The Y Method Page not found.'
tags:
- 'Intermediate Steps - The Y Method Page (Public)'
security: []
/api/v1/intermediate-steps/eight-most-common-mistakes:
get:
summary: 'Get Eight most common mistakes page content (public)'
operationId: getEightMostCommonMistakesPageContentpublic
description: 'Returns the headline and mistakes for display.'
parameters: []
responses:
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Eight most common mistakes page not found.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Eight most common mistakes page not found.'
tags:
- 'Intermediate Steps - Eight most common mistakes (Public)'
security: []
/api/v1/intermediate-steps/goal-settings:
get:
summary: 'Get Goal Settings Intermediate Page content (public)'
operationId: getGoalSettingsIntermediatePageContentpublic
description: ''
parameters: []
responses:
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Goal Settings Intermediate Page not found.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Goal Settings Intermediate Page not found.'
tags:
- 'Intermediate Steps - Goal Settings (Public)'
security: []
/api/v1/intermediate-steps/questions-goal-why:
get:
summary: 'Get Questions for each goal - why? page content (public)'
operationId: getQuestionsForEachGoalWhyPageContentpublic
description: ''
parameters: []
responses:
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Questions for each goal - why? page not found.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Questions for each goal - why? page not found.'
tags:
- 'Intermediate Steps - Questions for each goal - why? (Public)'
security: []
/api/v1/admin/legal-page:
get:
summary: 'List all legal pages'
operationId: listAllLegalPages
description: 'Returns all legal pages (privacy policy, refund policy, terms & conditions).'
parameters: []
responses:
200:
description: ''
content:
text/plain:
schema:
type: string
example: '{"success":true,"message":"Legal pages retrieved successfully","data":[{"id":1,"slug":"privacy-policy","content":"...","updated_at":"..."},...]}'
tags:
- 'Admin - Legal Pages (CMS)'
security: []
'/api/v1/admin/legal-page/{slug}':
get:
summary: 'Get a legal page by slug (admin)'
operationId: getALegalPageBySlugadmin
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Legal Pages (CMS)'
security: []
put:
summary: 'Update a legal page'
operationId: updateALegalPage
description: 'Update the content of a legal page. Slug cannot be changed.'
parameters: []
responses:
200:
description: ''
content:
text/plain:
schema:
type: string
example: '{"success":true,"message":"Legal page updated successfully","data":{...}}'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Legal page not found.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Legal page not found.'
tags:
- 'Admin - Legal Pages (CMS)'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
content:
type: string
description: 'optional The page content (HTML or plain text).'
example: '
Privacy policy content...
' nullable: true security: [] patch: summary: 'Update a legal page' operationId: updateALegalPage description: 'Update the content of a legal page. Slug cannot be changed.' parameters: [] responses: 200: description: '' content: text/plain: schema: type: string example: '{"success":true,"message":"Legal page updated successfully","data":{...}}' 404: description: '' content: application/json: schema: type: object example: success: false message: 'Legal page not found.' properties: success: type: boolean example: false message: type: string example: 'Legal page not found.' tags: - 'Admin - Legal Pages (CMS)' requestBody: required: false content: application/json: schema: type: object properties: content: type: string description: 'optional The page content (HTML or plain text).' example: 'Privacy policy content...
' nullable: true security: [] parameters: - in: path name: slug description: 'The page slug.' example: privacy-policy required: true schema: type: string '/api/v1/legal-page/{slug}': get: summary: 'Get a legal page by slug' operationId: getALegalPageBySlug description: 'Returns the content for the given legal page. Valid slugs: privacy-policy, refund-policy, terms-conditions.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: success: true message: 'Legal page retrieved successfully' data: id: 1 slug: privacy-policy content: ... updated_at: '2026-02-04T14:00:00+00:00' properties: success: type: boolean example: true message: type: string example: 'Legal page retrieved successfully' data: type: object properties: id: type: integer example: 1 slug: type: string example: privacy-policy content: type: string example: ... updated_at: type: string example: '2026-02-04T14:00:00+00:00' 404: description: '' content: application/json: schema: type: object example: success: false message: 'Legal page not found.' properties: success: type: boolean example: false message: type: string example: 'Legal page not found.' tags: - 'Legal Pages (Public)' security: [] parameters: - in: path name: slug description: 'The page slug.' example: privacy-policy required: true schema: type: string /api/v1/location/countries: get: summary: 'Get list of all countries' operationId: getListOfAllCountries description: 'Retrieve a list of all available countries.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: success: true message: 'Countries retrieved successfully' data: - id: 1 name: 'United States' - id: 2 name: Canada properties: success: type: boolean example: true message: type: string example: 'Countries retrieved successfully' data: type: array example: - id: 1 name: 'United States' - id: 2 name: Canada items: type: object properties: id: type: integer example: 1 name: type: string example: 'United States' tags: - Location security: [] '/api/v1/location/countries/{countryId}/states': get: summary: 'Get list of all states for a specific country' operationId: getListOfAllStatesForASpecificCountry description: 'Retrieve a list of all states/provinces for a given country.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: success: true message: 'States retrieved successfully' data: - id: 1 country_id: 1 name: California - id: 2 country_id: 1 name: 'New York' properties: success: type: boolean example: true message: type: string example: 'States retrieved successfully' data: type: array example: - id: 1 country_id: 1 name: California - id: 2 country_id: 1 name: 'New York' items: type: object properties: id: type: integer example: 1 country_id: type: integer example: 1 name: type: string example: California 404: description: '' content: application/json: schema: type: object example: success: false message: 'Country not found.' properties: success: type: boolean example: false message: type: string example: 'Country not found.' tags: - Location security: [] parameters: - in: path name: countryId description: 'The ID of the country.' example: 1 required: true schema: type: integer '/api/v1/location/states/{stateId}/cities': get: summary: 'Get list of all cities for a specific state' operationId: getListOfAllCitiesForASpecificState description: 'Retrieve a list of all cities for a given state/province.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: success: true message: 'Cities retrieved successfully' data: - id: 1 state_id: 1 name: 'Los Angeles' - id: 2 state_id: 1 name: 'San Francisco' properties: success: type: boolean example: true message: type: string example: 'Cities retrieved successfully' data: type: array example: - id: 1 state_id: 1 name: 'Los Angeles' - id: 2 state_id: 1 name: 'San Francisco' items: type: object properties: id: type: integer example: 1 state_id: type: integer example: 1 name: type: string example: 'Los Angeles' 404: description: '' content: application/json: schema: type: object example: success: false message: 'State not found.' properties: success: type: boolean example: false message: type: string example: 'State not found.' tags: - Location security: [] parameters: - in: path name: stateId description: 'The ID of the state.' example: 1 required: true schema: type: integer /api/v1/location/phone-country-codes: get: summary: 'Get list of all phone country codes' operationId: getListOfAllPhoneCountryCodes description: 'Retrieve a list of all phone country codes. Optionally filter by country ID.' parameters: - in: query name: country_id description: 'optional Filter phone codes by country ID.' example: 1 required: false schema: type: integer description: 'optional Filter phone codes by country ID.' example: 1 responses: 200: description: '' content: application/json: schema: type: object example: success: true message: 'Phone country codes retrieved successfully' data: - id: 1 phone_code: '+1' - id: 2 phone_code: '+91' properties: success: type: boolean example: true message: type: string example: 'Phone country codes retrieved successfully' data: type: array example: - id: 1 phone_code: '+1' - id: 2 phone_code: '+91' items: type: object properties: id: type: integer example: 1 phone_code: type: string example: '+1' tags: - Location security: [] /api/v1/admin/program-category: get: summary: 'Get list of program categories' operationId: getListOfProgramCategories description: 'Optional filter: parent_id=null or omitted for all; parent_id=0 for roots only; parent_id={id} for children of that category.' parameters: - in: query name: page description: 'The page number.' example: 1 required: false schema: type: integer description: 'The page number.' example: 1 - in: query name: per_page description: 'Number of items per page.' example: 15 required: false schema: type: integer description: 'Number of items per page.' example: 15 - in: query name: parent_id description: 'optional Filter by parent (0 or "null" for root-level only, or category id for children).' example: null required: false schema: type: integer description: 'optional Filter by parent (0 or "null" for root-level only, or category id for children).' example: null responses: 401: description: '' content: application/json: schema: type: object example: success: false message: Unauthenticated properties: success: type: boolean example: false message: type: string example: Unauthenticated tags: - 'Admin - Program Category Management' security: [] post: summary: 'Create a new program category or sub-category' operationId: createANewProgramCategoryOrSubCategory description: '' parameters: [] responses: { } tags: - 'Admin - Program Category Management' requestBody: required: true content: application/json: schema: type: object properties: parent_id: type: integer description: 'optional ID of parent category. Omit for top-level.' example: null nullable: true name: type: string description: 'The category name.' example: 'Personal Training' slug: type: string description: 'optional URL-friendly slug. If omitted, generated from name.' example: personal-training nullable: true description: type: string description: 'optional Description.' example: 'One-on-one fitness coaching sessions.' nullable: true sort_order: type: integer description: 'optional Display order (lower first). Default 0.' example: 0 nullable: true is_active: type: boolean description: 'optional Whether visible on frontend. Default true.' example: true nullable: true required: - name security: [] '/api/v1/admin/program-category/{id}': get: summary: 'Get a specific program category' operationId: getASpecificProgramCategory description: '' parameters: [] responses: 401: description: '' content: application/json: schema: type: object example: success: false message: Unauthenticated properties: success: type: boolean example: false message: type: string example: Unauthenticated tags: - 'Admin - Program Category Management' security: [] put: summary: 'Update a program category' operationId: updateAProgramCategory description: '' parameters: [] responses: { } tags: - 'Admin - Program Category Management' requestBody: required: false content: application/json: schema: type: object properties: parent_id: type: integer description: 'ID of the parent category. Null for top-level. Cannot set to self. Theid of an existing record in the program_categories table. Must not be one of .'
example: null
nullable: true
name:
type: string
description: 'The category name. Must not be greater than 255 characters.'
example: 'Personal Training'
slug:
type: string
description: 'URL-friendly slug. Unique per parent. Must match the regex /^[a-z0-9]+(?:-[a-z0-9]+)*$/. Must not be greater than 255 characters.'
example: personal-training
description:
type: string
description: 'Optional description. Must not be greater than 2000 characters.'
example: 'One-on-one fitness coaching sessions.'
nullable: true
sort_order:
type: integer
description: 'Display order (lower first). Must be at least 0.'
example: 0
nullable: true
is_active:
type: boolean
description: 'Whether the category is visible on the frontend.'
example: true
nullable: true
security: []
patch:
summary: 'Update a program category'
operationId: updateAProgramCategory
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Category Management'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
parent_id:
type: integer
description: 'ID of the parent category. Null for top-level. Cannot set to self. The id of an existing record in the program_categories table. Must not be one of .'
example: null
nullable: true
name:
type: string
description: 'The category name. Must not be greater than 255 characters.'
example: 'Personal Training'
slug:
type: string
description: 'URL-friendly slug. Unique per parent. Must match the regex /^[a-z0-9]+(?:-[a-z0-9]+)*$/. Must not be greater than 255 characters.'
example: personal-training
description:
type: string
description: 'Optional description. Must not be greater than 2000 characters.'
example: 'One-on-one fitness coaching sessions.'
nullable: true
sort_order:
type: integer
description: 'Display order (lower first). Must be at least 0.'
example: 0
nullable: true
is_active:
type: boolean
description: 'Whether the category is visible on the frontend.'
example: true
nullable: true
security: []
delete:
summary: 'Delete a program category'
operationId: deleteAProgramCategory
description: "Children will have their parent_id set to null (become root-level) via onDelete('set null')."
parameters: []
responses: { }
tags:
- 'Admin - Program Category Management'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program category.'
example: 1
required: true
schema:
type: integer
/api/v1/program-category:
get:
summary: 'List active program categories'
operationId: listActiveProgramCategories
description: "Optional: parent_id=null (or 0) for root-level only; parent_id={id} for children of that category.\nOptional: nested=1 to return root categories with their active children nested."
parameters:
-
in: query
name: page
description: 'The page number.'
example: 1
required: false
schema:
type: integer
description: 'The page number.'
example: 1
-
in: query
name: per_page
description: 'Number of items per page.'
example: 15
required: false
schema:
type: integer
description: 'Number of items per page.'
example: 15
-
in: query
name: parent_id
description: 'optional Filter by parent (null/0 for roots, or category id for children).'
example: null
required: false
schema:
type: integer
description: 'optional Filter by parent (null/0 for roots, or category id for children).'
example: null
-
in: query
name: nested
description: 'optional Set to 1 to get root categories with children nested.'
example: 0
required: false
schema:
type: integer
description: 'optional Set to 1 to get root categories with children nested.'
example: 0
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Program categories retrieved successfully'
data:
data: []
links:
first: 'https://ruhline-api.test/api/v1/program-category?page=1'
last: 'https://ruhline-api.test/api/v1/program-category?page=1'
prev: null
next: null
meta:
current_page: 1
from: null
last_page: 1
links:
-
url: null
label: '« Previous'
page: null
active: false
-
url: 'https://ruhline-api.test/api/v1/program-category?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Next »'
page: null
active: false
path: 'https://ruhline-api.test/api/v1/program-category'
per_page: 15
to: null
total: 0
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Program categories retrieved successfully'
data:
type: object
properties:
data:
type: array
example: []
links:
type: object
properties:
first:
type: string
example: 'https://ruhline-api.test/api/v1/program-category?page=1'
last:
type: string
example: 'https://ruhline-api.test/api/v1/program-category?page=1'
prev:
type: string
example: null
nullable: true
next:
type: string
example: null
nullable: true
meta:
type: object
properties:
current_page:
type: integer
example: 1
from:
type: string
example: null
nullable: true
last_page:
type: integer
example: 1
links:
type: array
example:
-
url: null
label: '« Previous'
page: null
active: false
-
url: 'https://ruhline-api.test/api/v1/program-category?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Next »'
page: null
active: false
items:
type: object
properties:
url:
type: string
example: null
nullable: true
label:
type: string
example: '« Previous'
page:
type: string
example: null
nullable: true
active:
type: boolean
example: false
path:
type: string
example: 'https://ruhline-api.test/api/v1/program-category'
per_page:
type: integer
example: 15
to:
type: string
example: null
nullable: true
total:
type: integer
example: 0
tags:
- 'Program Categories (Public)'
security: []
'/api/v1/program-category/{id}':
get:
summary: 'Get a single active program category (optionally with children)'
operationId: getASingleActiveProgramCategoryoptionallyWithChildren
description: ''
parameters:
-
in: query
name: with_children
description: 'optional Set to 1 to include active child categories.'
example: 0
required: false
schema:
type: integer
description: 'optional Set to 1 to include active child categories.'
example: 0
responses:
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Program category not found.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Program category not found.'
tags:
- 'Program Categories (Public)'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program category.'
example: 1
required: true
schema:
type: integer
/api/v1/admin/program:
get:
summary: 'Get list of programs'
operationId: getListOfPrograms
description: ''
parameters:
-
in: query
name: page
description: 'The page number.'
example: 1
required: false
schema:
type: integer
description: 'The page number.'
example: 1
-
in: query
name: per_page
description: 'Number of items per page.'
example: 15
required: false
schema:
type: integer
description: 'Number of items per page.'
example: 15
-
in: query
name: program_category_id
description: 'optional Filter by program category.'
example: 1
required: false
schema:
type: integer
description: 'optional Filter by program category.'
example: 1
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Program Management'
security: []
post:
summary: 'Create a new program'
operationId: createANewProgram
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Management'
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
name:
type: string
description: 'Auto-generated from validation rules for `name`. Must not be greater than 255 characters.'
example: b
program_category_id:
type: integer
description: 'Auto-generated from validation rules for `program_category_id`. The id of an existing record in the program_categories table.'
example: 16
description:
type: string
description: 'Auto-generated from validation rules for `description`.'
example: 'Eius et animi quos velit et.'
nullable: true
main_image:
type: string
format: binary
description: 'Auto-generated from validation rules for `main_image`. Must be an image. Must not be greater than 2048 kilobytes.'
nullable: true
gallery_images:
type: array
description: 'Auto-generated from validation rules for `gallery_images.*`. Must be an image. Must not be greater than 2048 kilobytes.'
items:
type: string
format: binary
nullable: true
faqs_section_image:
type: string
format: binary
description: 'Auto-generated from validation rules for `faqs_section_image`. Must be an image. Must not be greater than 2048 kilobytes.'
nullable: true
faqs:
type: array
description: 'Auto-generated from validation rules for `faqs`.'
example: null
items:
type: object
nullable: true
properties:
heading:
type: string
description: 'Auto-generated from validation rules for `faqs.*.heading`. Must not be greater than 500 characters.'
example: 'n'
description:
type: string
description: 'Auto-generated from validation rules for `faqs.*.description`.'
example: 'Eius et animi quos velit et.'
sort_order:
type: integer
description: 'Auto-generated from validation rules for `faqs.*.sort_order`. Must be at least 0.'
example: 60
nullable: true
required:
- heading
- description
benefits_section_image:
type: string
format: binary
description: 'Auto-generated from validation rules for `benefits_section_image`. Must be an image. Must not be greater than 2048 kilobytes.'
nullable: true
benefits:
type: array
description: 'Auto-generated from validation rules for `benefits`.'
example: null
items:
type: object
nullable: true
properties:
description:
type: string
description: 'Auto-generated from validation rules for `benefits.*.description`.'
example: 'Eius et animi quos velit et.'
sort_order:
type: integer
description: 'Auto-generated from validation rules for `benefits.*.sort_order`. Must be at least 0.'
example: 60
nullable: true
required:
- description
how_it_works_section_image:
type: string
format: binary
description: 'Auto-generated from validation rules for `how_it_works_section_image`. Must be an image. Must not be greater than 2048 kilobytes.'
nullable: true
how_it_works:
type: array
description: 'Auto-generated from validation rules for `how_it_works`.'
example: null
items:
type: object
nullable: true
properties:
description:
type: string
description: 'Auto-generated from validation rules for `how_it_works.*.description`.'
example: 'Eius et animi quos velit et.'
sort_order:
type: integer
description: 'Auto-generated from validation rules for `how_it_works.*.sort_order`. Must be at least 0.'
example: 60
nullable: true
required:
- description
occurrence_type:
type: string
description: 'Auto-generated from validation rules for `occurrence_type`.'
example: one_time
enum:
- one_time
- recurring
session_duration_minutes:
type: integer
description: 'Auto-generated from validation rules for `session_duration_minutes`.'
example: 180
enum:
- 30
- 45
- 60
- 75
- 90
- 105
- 120
- 135
- 150
- 165
- 180
- 195
- 210
- 225
- 240
tenure_weeks:
type: integer
description: 'Auto-generated from validation rules for `tenure_weeks`. This field is required when occurrence_type is recurring. Must be at least 1. Must not be greater than 520.'
example: 1
nullable: true
sessions_per_week:
type: integer
description: 'Auto-generated from validation rules for `sessions_per_week`. This field is required when occurrence_type is recurring. Must be at least 1. Must not be greater than 28.'
example: 1
nullable: true
sale_price:
type: number
description: 'Auto-generated from validation rules for `sale_price`. Must be at least 0.'
example: 37
original_price:
type: number
description: 'Auto-generated from validation rules for `original_price`. Must be at least 0.'
example: 9
coach_commission_type:
type: string
description: 'Auto-generated from validation rules for `coach_commission_type`.'
example: custom
enum:
- global
- custom
custom_commission_rate:
type: number
description: 'Auto-generated from validation rules for `custom_commission_rate`. This field is required when coach_commission_type is custom. Must be at least 0. Must not be greater than 100.'
example: 17
nullable: true
coach_ids:
type: array
description: 'Auto-generated from validation rules for `coach_ids.*`. The id of an existing record in the coaches table.'
example:
- 16
items:
type: integer
tag:
type: string
description: 'Auto-generated from validation rules for `tag`.'
example: recommended
enum:
- new
- bestselling
- most_rated
- recommended
nullable: true
required:
- name
- program_category_id
- occurrence_type
- session_duration_minutes
- sale_price
- original_price
- coach_commission_type
security: []
'/api/v1/admin/program/{id}':
get:
summary: 'Get a specific program'
operationId: getASpecificProgram
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Program Management'
security: []
post:
summary: 'Update a program'
operationId: updateAProgram
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Management'
requestBody:
required: false
content:
multipart/form-data:
schema:
type: object
properties:
name:
type: string
description: 'Auto-generated from validation rules for `name`. Must not be greater than 255 characters.'
example: b
program_category_id:
type: integer
description: 'Auto-generated from validation rules for `program_category_id`. The id of an existing record in the program_categories table.'
example: 16
description:
type: string
description: 'Auto-generated from validation rules for `description`.'
example: 'Eius et animi quos velit et.'
nullable: true
main_image:
type: string
format: binary
description: 'Auto-generated from validation rules for `main_image`. Must be an image. Must not be greater than 2048 kilobytes.'
nullable: true
gallery_images:
type: array
description: 'Auto-generated from validation rules for `gallery_images.*`. Must be an image. Must not be greater than 2048 kilobytes.'
items:
type: string
format: binary
nullable: true
faqs_section_image:
type: string
format: binary
description: 'Auto-generated from validation rules for `faqs_section_image`. Must be an image. Must not be greater than 2048 kilobytes.'
nullable: true
faqs:
type: array
description: 'Auto-generated from validation rules for `faqs`.'
example: null
items:
type: object
nullable: true
properties:
id:
type: integer
description: 'Auto-generated from validation rules for `faqs.*.id`. The id of an existing record in the program_faqs table.'
example: 16
heading:
type: string
description: 'Auto-generated from validation rules for `faqs.*.heading`. Must not be greater than 500 characters.'
example: 'n'
description:
type: string
description: 'Auto-generated from validation rules for `faqs.*.description`.'
example: 'Eius et animi quos velit et.'
sort_order:
type: integer
description: 'Auto-generated from validation rules for `faqs.*.sort_order`. Must be at least 0.'
example: 60
nullable: true
required:
- heading
- description
benefits_section_image:
type: string
format: binary
description: 'Auto-generated from validation rules for `benefits_section_image`. Must be an image. Must not be greater than 2048 kilobytes.'
nullable: true
benefits:
type: array
description: 'Auto-generated from validation rules for `benefits`.'
example: null
items:
type: object
nullable: true
properties:
id:
type: integer
description: 'Auto-generated from validation rules for `benefits.*.id`. The id of an existing record in the program_benefits table.'
example: 16
description:
type: string
description: 'Auto-generated from validation rules for `benefits.*.description`.'
example: 'Eius et animi quos velit et.'
sort_order:
type: integer
description: 'Auto-generated from validation rules for `benefits.*.sort_order`. Must be at least 0.'
example: 60
nullable: true
required:
- description
how_it_works_section_image:
type: string
format: binary
description: 'Auto-generated from validation rules for `how_it_works_section_image`. Must be an image. Must not be greater than 2048 kilobytes.'
nullable: true
how_it_works:
type: array
description: 'Auto-generated from validation rules for `how_it_works`.'
example: null
items:
type: object
nullable: true
properties:
id:
type: integer
description: 'Auto-generated from validation rules for `how_it_works.*.id`. The id of an existing record in the program_how_it_works table.'
example: 16
description:
type: string
description: 'Auto-generated from validation rules for `how_it_works.*.description`.'
example: 'Eius et animi quos velit et.'
sort_order:
type: integer
description: 'Auto-generated from validation rules for `how_it_works.*.sort_order`. Must be at least 0.'
example: 60
nullable: true
required:
- description
occurrence_type:
type: string
description: 'Auto-generated from validation rules for `occurrence_type`.'
example: recurring
enum:
- one_time
- recurring
session_duration_minutes:
type: integer
description: 'Auto-generated from validation rules for `session_duration_minutes`.'
example: 210
enum:
- 30
- 45
- 60
- 75
- 90
- 105
- 120
- 135
- 150
- 165
- 180
- 195
- 210
- 225
- 240
tenure_weeks:
type: integer
description: 'Auto-generated from validation rules for `tenure_weeks`. Must be at least 1. Must not be greater than 520.'
example: 1
nullable: true
sessions_per_week:
type: integer
description: 'Auto-generated from validation rules for `sessions_per_week`. Must be at least 1. Must not be greater than 28.'
example: 1
nullable: true
sale_price:
type: number
description: 'Auto-generated from validation rules for `sale_price`. Must be at least 0.'
example: 37
original_price:
type: number
description: 'Auto-generated from validation rules for `original_price`. Must be at least 0.'
example: 9
coach_commission_type:
type: string
description: 'Auto-generated from validation rules for `coach_commission_type`.'
example: global
enum:
- global
- custom
custom_commission_rate:
type: number
description: 'Auto-generated from validation rules for `custom_commission_rate`. Must be at least 0. Must not be greater than 100.'
example: 17
nullable: true
coach_ids:
type: array
description: 'Auto-generated from validation rules for `coach_ids.*`. The id of an existing record in the coaches table.'
example:
- 16
items:
type: integer
tag:
type: string
description: 'Auto-generated from validation rules for `tag`.'
example: most_rated
enum:
- new
- bestselling
- most_rated
- recommended
nullable: true
security: []
put:
summary: 'Update a program'
operationId: updateAProgram
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Management'
requestBody:
required: false
content:
multipart/form-data:
schema:
type: object
properties:
name:
type: string
description: 'Auto-generated from validation rules for `name`. Must not be greater than 255 characters.'
example: b
program_category_id:
type: integer
description: 'Auto-generated from validation rules for `program_category_id`. The id of an existing record in the program_categories table.'
example: 16
description:
type: string
description: 'Auto-generated from validation rules for `description`.'
example: 'Eius et animi quos velit et.'
nullable: true
main_image:
type: string
format: binary
description: 'Auto-generated from validation rules for `main_image`. Must be an image. Must not be greater than 2048 kilobytes.'
nullable: true
gallery_images:
type: array
description: 'Auto-generated from validation rules for `gallery_images.*`. Must be an image. Must not be greater than 2048 kilobytes.'
items:
type: string
format: binary
nullable: true
faqs_section_image:
type: string
format: binary
description: 'Auto-generated from validation rules for `faqs_section_image`. Must be an image. Must not be greater than 2048 kilobytes.'
nullable: true
faqs:
type: array
description: 'Auto-generated from validation rules for `faqs`.'
example: null
items:
type: object
nullable: true
properties:
id:
type: integer
description: 'Auto-generated from validation rules for `faqs.*.id`. The id of an existing record in the program_faqs table.'
example: 16
heading:
type: string
description: 'Auto-generated from validation rules for `faqs.*.heading`. Must not be greater than 500 characters.'
example: 'n'
description:
type: string
description: 'Auto-generated from validation rules for `faqs.*.description`.'
example: 'Eius et animi quos velit et.'
sort_order:
type: integer
description: 'Auto-generated from validation rules for `faqs.*.sort_order`. Must be at least 0.'
example: 60
nullable: true
required:
- heading
- description
benefits_section_image:
type: string
format: binary
description: 'Auto-generated from validation rules for `benefits_section_image`. Must be an image. Must not be greater than 2048 kilobytes.'
nullable: true
benefits:
type: array
description: 'Auto-generated from validation rules for `benefits`.'
example: null
items:
type: object
nullable: true
properties:
id:
type: integer
description: 'Auto-generated from validation rules for `benefits.*.id`. The id of an existing record in the program_benefits table.'
example: 16
description:
type: string
description: 'Auto-generated from validation rules for `benefits.*.description`.'
example: 'Eius et animi quos velit et.'
sort_order:
type: integer
description: 'Auto-generated from validation rules for `benefits.*.sort_order`. Must be at least 0.'
example: 60
nullable: true
required:
- description
how_it_works_section_image:
type: string
format: binary
description: 'Auto-generated from validation rules for `how_it_works_section_image`. Must be an image. Must not be greater than 2048 kilobytes.'
nullable: true
how_it_works:
type: array
description: 'Auto-generated from validation rules for `how_it_works`.'
example: null
items:
type: object
nullable: true
properties:
id:
type: integer
description: 'Auto-generated from validation rules for `how_it_works.*.id`. The id of an existing record in the program_how_it_works table.'
example: 16
description:
type: string
description: 'Auto-generated from validation rules for `how_it_works.*.description`.'
example: 'Eius et animi quos velit et.'
sort_order:
type: integer
description: 'Auto-generated from validation rules for `how_it_works.*.sort_order`. Must be at least 0.'
example: 60
nullable: true
required:
- description
occurrence_type:
type: string
description: 'Auto-generated from validation rules for `occurrence_type`.'
example: recurring
enum:
- one_time
- recurring
session_duration_minutes:
type: integer
description: 'Auto-generated from validation rules for `session_duration_minutes`.'
example: 105
enum:
- 30
- 45
- 60
- 75
- 90
- 105
- 120
- 135
- 150
- 165
- 180
- 195
- 210
- 225
- 240
tenure_weeks:
type: integer
description: 'Auto-generated from validation rules for `tenure_weeks`. Must be at least 1. Must not be greater than 520.'
example: 1
nullable: true
sessions_per_week:
type: integer
description: 'Auto-generated from validation rules for `sessions_per_week`. Must be at least 1. Must not be greater than 28.'
example: 1
nullable: true
sale_price:
type: number
description: 'Auto-generated from validation rules for `sale_price`. Must be at least 0.'
example: 37
original_price:
type: number
description: 'Auto-generated from validation rules for `original_price`. Must be at least 0.'
example: 9
coach_commission_type:
type: string
description: 'Auto-generated from validation rules for `coach_commission_type`.'
example: global
enum:
- global
- custom
custom_commission_rate:
type: number
description: 'Auto-generated from validation rules for `custom_commission_rate`. Must be at least 0. Must not be greater than 100.'
example: 17
nullable: true
coach_ids:
type: array
description: 'Auto-generated from validation rules for `coach_ids.*`. The id of an existing record in the coaches table.'
example:
- 16
items:
type: integer
tag:
type: string
description: 'Auto-generated from validation rules for `tag`.'
example: most_rated
enum:
- new
- bestselling
- most_rated
- recommended
nullable: true
security: []
patch:
summary: 'Update a program'
operationId: updateAProgram
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Management'
requestBody:
required: false
content:
multipart/form-data:
schema:
type: object
properties:
name:
type: string
description: 'Auto-generated from validation rules for `name`. Must not be greater than 255 characters.'
example: b
program_category_id:
type: integer
description: 'Auto-generated from validation rules for `program_category_id`. The id of an existing record in the program_categories table.'
example: 16
description:
type: string
description: 'Auto-generated from validation rules for `description`.'
example: 'Eius et animi quos velit et.'
nullable: true
main_image:
type: string
format: binary
description: 'Auto-generated from validation rules for `main_image`. Must be an image. Must not be greater than 2048 kilobytes.'
nullable: true
gallery_images:
type: array
description: 'Auto-generated from validation rules for `gallery_images.*`. Must be an image. Must not be greater than 2048 kilobytes.'
items:
type: string
format: binary
nullable: true
faqs_section_image:
type: string
format: binary
description: 'Auto-generated from validation rules for `faqs_section_image`. Must be an image. Must not be greater than 2048 kilobytes.'
nullable: true
faqs:
type: array
description: 'Auto-generated from validation rules for `faqs`.'
example: null
items:
type: object
nullable: true
properties:
id:
type: integer
description: 'Auto-generated from validation rules for `faqs.*.id`. The id of an existing record in the program_faqs table.'
example: 16
heading:
type: string
description: 'Auto-generated from validation rules for `faqs.*.heading`. Must not be greater than 500 characters.'
example: 'n'
description:
type: string
description: 'Auto-generated from validation rules for `faqs.*.description`.'
example: 'Eius et animi quos velit et.'
sort_order:
type: integer
description: 'Auto-generated from validation rules for `faqs.*.sort_order`. Must be at least 0.'
example: 60
nullable: true
required:
- heading
- description
benefits_section_image:
type: string
format: binary
description: 'Auto-generated from validation rules for `benefits_section_image`. Must be an image. Must not be greater than 2048 kilobytes.'
nullable: true
benefits:
type: array
description: 'Auto-generated from validation rules for `benefits`.'
example: null
items:
type: object
nullable: true
properties:
id:
type: integer
description: 'Auto-generated from validation rules for `benefits.*.id`. The id of an existing record in the program_benefits table.'
example: 16
description:
type: string
description: 'Auto-generated from validation rules for `benefits.*.description`.'
example: 'Eius et animi quos velit et.'
sort_order:
type: integer
description: 'Auto-generated from validation rules for `benefits.*.sort_order`. Must be at least 0.'
example: 60
nullable: true
required:
- description
how_it_works_section_image:
type: string
format: binary
description: 'Auto-generated from validation rules for `how_it_works_section_image`. Must be an image. Must not be greater than 2048 kilobytes.'
nullable: true
how_it_works:
type: array
description: 'Auto-generated from validation rules for `how_it_works`.'
example: null
items:
type: object
nullable: true
properties:
id:
type: integer
description: 'Auto-generated from validation rules for `how_it_works.*.id`. The id of an existing record in the program_how_it_works table.'
example: 16
description:
type: string
description: 'Auto-generated from validation rules for `how_it_works.*.description`.'
example: 'Eius et animi quos velit et.'
sort_order:
type: integer
description: 'Auto-generated from validation rules for `how_it_works.*.sort_order`. Must be at least 0.'
example: 60
nullable: true
required:
- description
occurrence_type:
type: string
description: 'Auto-generated from validation rules for `occurrence_type`.'
example: one_time
enum:
- one_time
- recurring
session_duration_minutes:
type: integer
description: 'Auto-generated from validation rules for `session_duration_minutes`.'
example: 240
enum:
- 30
- 45
- 60
- 75
- 90
- 105
- 120
- 135
- 150
- 165
- 180
- 195
- 210
- 225
- 240
tenure_weeks:
type: integer
description: 'Auto-generated from validation rules for `tenure_weeks`. Must be at least 1. Must not be greater than 520.'
example: 1
nullable: true
sessions_per_week:
type: integer
description: 'Auto-generated from validation rules for `sessions_per_week`. Must be at least 1. Must not be greater than 28.'
example: 1
nullable: true
sale_price:
type: number
description: 'Auto-generated from validation rules for `sale_price`. Must be at least 0.'
example: 37
original_price:
type: number
description: 'Auto-generated from validation rules for `original_price`. Must be at least 0.'
example: 9
coach_commission_type:
type: string
description: 'Auto-generated from validation rules for `coach_commission_type`.'
example: global
enum:
- global
- custom
custom_commission_rate:
type: number
description: 'Auto-generated from validation rules for `custom_commission_rate`. Must be at least 0. Must not be greater than 100.'
example: 17
nullable: true
coach_ids:
type: array
description: 'Auto-generated from validation rules for `coach_ids.*`. The id of an existing record in the coaches table.'
example:
- 16
items:
type: integer
tag:
type: string
description: 'Auto-generated from validation rules for `tag`.'
example: most_rated
enum:
- new
- bestselling
- most_rated
- recommended
nullable: true
security: []
delete:
summary: 'Delete a program'
operationId: deleteAProgram
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Management'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: 1
required: true
schema:
type: integer
'/api/v1/admin/program/{id}/gallery/{imageId}':
delete:
summary: 'Delete a single gallery image from a program'
operationId: deleteASingleGalleryImageFromAProgram
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Management'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: 1
required: true
schema:
type: integer
-
in: path
name: imageId
description: 'The ID of the gallery image to delete.'
example: 5
required: true
schema:
type: integer
/api/v1/admin/review:
get:
summary: ''
operationId: getApiV1AdminReview
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Program Reviews'
security: []
'/api/v1/admin/review/{id}':
get:
summary: ''
operationId: getApiV1AdminReviewId
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Program Reviews'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the review.'
example: architecto
required: true
schema:
type: string
'/api/v1/admin/program/{id}/settings':
get:
summary: 'Get program settings (quote category and card category).'
operationId: getProgramSettingsquoteCategoryAndCardCategory
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Program Settings'
security: []
put:
summary: 'Update program settings (set or change quote category and/or card category).'
operationId: updateProgramSettingssetOrChangeQuoteCategoryAndorCardCategory
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Settings'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
quote_category_id:
type: integer
description: 'Auto-generated from validation rules for `quote_category_id`. The id of an existing record in the quote_categories table.'
example: 16
nullable: true
card_category_id:
type: integer
description: 'Auto-generated from validation rules for `card_category_id`. The id of an existing record in the card_categories table.'
example: 16
nullable: true
coach_can_edit_modules:
type: boolean
description: 'Auto-generated from validation rules for `coach_can_edit_modules`.'
example: false
nullable: true
coach_editable_module_types:
type: array
description: 'Auto-generated from validation rules for `coach_editable_module_types.*`.'
example:
- upload_documents
items:
type: string
enum:
- values
- wheel_of_life
- find_your_motivation
- upload_documents
- who_am_i
security: []
patch:
summary: 'Update program settings (set or change quote category and/or card category).'
operationId: updateProgramSettingssetOrChangeQuoteCategoryAndorCardCategory
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Settings'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
quote_category_id:
type: integer
description: 'Auto-generated from validation rules for `quote_category_id`. The id of an existing record in the quote_categories table.'
example: 16
nullable: true
card_category_id:
type: integer
description: 'Auto-generated from validation rules for `card_category_id`. The id of an existing record in the card_categories table.'
example: 16
nullable: true
coach_can_edit_modules:
type: boolean
description: 'Auto-generated from validation rules for `coach_can_edit_modules`.'
example: true
nullable: true
coach_editable_module_types:
type: array
description: 'Auto-generated from validation rules for `coach_editable_module_types.*`.'
example:
- wheel_of_life
items:
type: string
enum:
- values
- wheel_of_life
- find_your_motivation
- upload_documents
- who_am_i
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: architecto
required: true
schema:
type: string
'/api/v1/admin/program/{id}/structure':
get:
summary: 'List program structure (all modules in order).'
operationId: listProgramStructureallModulesInOrder
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Program Structure'
security: []
post:
summary: 'Add a module to the program structure.'
operationId: addAModuleToTheProgramStructure
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
module_type:
type: string
description: 'Auto-generated from validation rules for `module_type`.'
example: values
enum:
- find_your_motivation
- values
- wheel_of_life
- who_am_i
- quote
- card_game
- upload_documents
- goal_settings
- habit_tracker
- intermediate_values
- intermediate_eight_common_mistakes
- intermediate_goal_settings
- intermediate_questions_goal_why
- intermediate_y_method
required:
- module_type
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: architecto
required: true
schema:
type: string
'/api/v1/admin/program/{id}/structure/reorder':
put:
summary: 'Reorder modules in the program structure.'
operationId: reorderModulesInTheProgramStructure
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
order:
type: array
description: 'Auto-generated from validation rules for `order.*`. The id of an existing record in the program_structures table.'
example:
- 16
items:
type: integer
security: []
patch:
summary: 'Reorder modules in the program structure.'
operationId: reorderModulesInTheProgramStructure
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
order:
type: array
description: 'Auto-generated from validation rules for `order.*`. The id of an existing record in the program_structures table.'
example:
- 16
items:
type: integer
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: architecto
required: true
schema:
type: string
'/api/v1/admin/program/{id}/structure/{structureId}':
delete:
summary: 'Remove a module from the program structure.'
operationId: removeAModuleFromTheProgramStructure
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/admin/program/{id}/structure/{structureId}/words':
get:
summary: 'List words for a Find your Motivation module.'
operationId: listWordsForAFindYourMotivationModule
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Program Structure'
security: []
post:
summary: 'Add a word to a Find your Motivation module.'
operationId: addAWordToAFindYourMotivationModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
word:
type: string
description: 'Auto-generated from validation rules for `word`. Must not be greater than 255 characters.'
example: b
required:
- word
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/admin/program/{id}/structure/{structureId}/words/reorder':
put:
summary: 'Reorder words in a Find your Motivation module.'
operationId: reorderWordsInAFindYourMotivationModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
order:
type: array
description: 'Auto-generated from validation rules for `order.*`. The id of an existing record in the program_structure_find_your_motivation_words table.'
example:
- 16
items:
type: integer
security: []
patch:
summary: 'Reorder words in a Find your Motivation module.'
operationId: reorderWordsInAFindYourMotivationModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
order:
type: array
description: 'Auto-generated from validation rules for `order.*`. The id of an existing record in the program_structure_find_your_motivation_words table.'
example:
- 16
items:
type: integer
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/admin/program/{id}/structure/{structureId}/words/{wordId}':
put:
summary: 'Update a word in a Find your Motivation module.'
operationId: updateAWordInAFindYourMotivationModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
word:
type: string
description: 'Auto-generated from validation rules for `word`. Must not be greater than 255 characters.'
example: b
required:
- word
security: []
patch:
summary: 'Update a word in a Find your Motivation module.'
operationId: updateAWordInAFindYourMotivationModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
word:
type: string
description: 'Auto-generated from validation rules for `word`. Must not be greater than 255 characters.'
example: b
required:
- word
security: []
delete:
summary: 'Delete a word from a Find your Motivation module.'
operationId: deleteAWordFromAFindYourMotivationModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: wordId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/admin/program/{id}/structure/{structureId}/values/questions':
get:
summary: 'List questions for a Values module.'
operationId: listQuestionsForAValuesModule
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Program Structure'
security: []
post:
summary: 'Add a question to a Values module.'
operationId: addAQuestionToAValuesModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
type:
type: string
description: 'Auto-generated from validation rules for `type`.'
example: dropdown
enum:
- descriptive
- multi_choice
- single_choice
- dropdown
question_text:
type: string
description: 'Auto-generated from validation rules for `question_text`. Must not be greater than 2000 characters.'
example: b
options:
type: array
description: 'Auto-generated from validation rules for `options.*`. Must not be greater than 500 characters.'
example:
- 'n'
items:
type: string
required:
- type
- question_text
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/admin/program/{id}/structure/{structureId}/values/questions/reorder':
put:
summary: 'Reorder questions in a Values module.'
operationId: reorderQuestionsInAValuesModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
order:
type: array
description: 'Auto-generated from validation rules for `order.*`. The id of an existing record in the program_structure_values_questions table.'
example:
- 16
items:
type: integer
security: []
patch:
summary: 'Reorder questions in a Values module.'
operationId: reorderQuestionsInAValuesModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
order:
type: array
description: 'Auto-generated from validation rules for `order.*`. The id of an existing record in the program_structure_values_questions table.'
example:
- 16
items:
type: integer
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/admin/program/{id}/structure/{structureId}/values/questions/{questionId}':
put:
summary: 'Update a question in a Values module.'
operationId: updateAQuestionInAValuesModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
type:
type: string
description: 'Auto-generated from validation rules for `type`.'
example: single_choice
enum:
- descriptive
- multi_choice
- single_choice
- dropdown
question_text:
type: string
description: 'Auto-generated from validation rules for `question_text`. Must not be greater than 2000 characters.'
example: b
options:
type: array
description: 'Auto-generated from validation rules for `options.*`. Must not be greater than 500 characters.'
example:
- 'n'
items:
type: string
required:
- type
- question_text
security: []
patch:
summary: 'Update a question in a Values module.'
operationId: updateAQuestionInAValuesModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
type:
type: string
description: 'Auto-generated from validation rules for `type`.'
example: single_choice
enum:
- descriptive
- multi_choice
- single_choice
- dropdown
question_text:
type: string
description: 'Auto-generated from validation rules for `question_text`. Must not be greater than 2000 characters.'
example: b
options:
type: array
description: 'Auto-generated from validation rules for `options.*`. Must not be greater than 500 characters.'
example:
- 'n'
items:
type: string
required:
- type
- question_text
security: []
delete:
summary: 'Delete a question from a Values module.'
operationId: deleteAQuestionFromAValuesModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: questionId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/admin/program/{id}/structure/{structureId}/who-am-i/questions':
get:
summary: 'List questions for a Who am I module.'
operationId: listQuestionsForAWhoAmIModule
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Program Structure'
security: []
post:
summary: 'Add a question to a Who am I module.'
operationId: addAQuestionToAWhoAmIModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
type:
type: string
description: 'Auto-generated from validation rules for `type`.'
example: multi_choice
enum:
- descriptive
- multi_choice
- single_choice
- dropdown
question_text:
type: string
description: 'Auto-generated from validation rules for `question_text`. Must not be greater than 2000 characters.'
example: b
options:
type: array
description: 'Auto-generated from validation rules for `options.*`. Must not be greater than 500 characters.'
example:
- 'n'
items:
type: string
required:
- type
- question_text
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/admin/program/{id}/structure/{structureId}/who-am-i/questions/reorder':
put:
summary: 'Reorder questions in a Who am I module.'
operationId: reorderQuestionsInAWhoAmIModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
order:
type: array
description: 'Auto-generated from validation rules for `order.*`. The id of an existing record in the program_structure_who_am_i_questions table.'
example:
- 16
items:
type: integer
security: []
patch:
summary: 'Reorder questions in a Who am I module.'
operationId: reorderQuestionsInAWhoAmIModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
order:
type: array
description: 'Auto-generated from validation rules for `order.*`. The id of an existing record in the program_structure_who_am_i_questions table.'
example:
- 16
items:
type: integer
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/admin/program/{id}/structure/{structureId}/who-am-i/questions/{questionId}':
put:
summary: 'Update a question in a Who am I module.'
operationId: updateAQuestionInAWhoAmIModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
type:
type: string
description: 'Auto-generated from validation rules for `type`.'
example: multi_choice
enum:
- descriptive
- multi_choice
- single_choice
- dropdown
question_text:
type: string
description: 'Auto-generated from validation rules for `question_text`. Must not be greater than 2000 characters.'
example: b
options:
type: array
description: 'Auto-generated from validation rules for `options.*`. Must not be greater than 500 characters.'
example:
- 'n'
items:
type: string
required:
- type
- question_text
security: []
patch:
summary: 'Update a question in a Who am I module.'
operationId: updateAQuestionInAWhoAmIModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
type:
type: string
description: 'Auto-generated from validation rules for `type`.'
example: multi_choice
enum:
- descriptive
- multi_choice
- single_choice
- dropdown
question_text:
type: string
description: 'Auto-generated from validation rules for `question_text`. Must not be greater than 2000 characters.'
example: b
options:
type: array
description: 'Auto-generated from validation rules for `options.*`. Must not be greater than 500 characters.'
example:
- 'n'
items:
type: string
required:
- type
- question_text
security: []
delete:
summary: 'Delete a question from a Who am I module.'
operationId: deleteAQuestionFromAWhoAmIModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: questionId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/admin/program/{id}/structure/{structureId}/card-game/question-sets':
get:
summary: 'List question sets for a Card Game module.'
operationId: listQuestionSetsForACardGameModule
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Program Structure'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/admin/program/{id}/structure/{structureId}/card-game/question-sets/reorder':
put:
summary: 'Reorder question sets in a Card Game module.'
operationId: reorderQuestionSetsInACardGameModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
order:
type: array
description: 'Auto-generated from validation rules for `order.*`. The id of an existing record in the program_structure_card_game_question_sets table.'
example:
- 16
items:
type: integer
security: []
patch:
summary: 'Reorder question sets in a Card Game module.'
operationId: reorderQuestionSetsInACardGameModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
order:
type: array
description: 'Auto-generated from validation rules for `order.*`. The id of an existing record in the program_structure_card_game_question_sets table.'
example:
- 16
items:
type: integer
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/admin/program/{id}/structure/{structureId}/card-game/question-sets/{setId}':
put:
summary: 'Update a question set (e.g. rename title) in a Card Game module.'
operationId: updateAQuestionSetegRenameTitleInACardGameModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
title:
type: string
description: 'Auto-generated from validation rules for `title`. Must not be greater than 255 characters.'
example: b
required:
- title
security: []
patch:
summary: 'Update a question set (e.g. rename title) in a Card Game module.'
operationId: updateAQuestionSetegRenameTitleInACardGameModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
title:
type: string
description: 'Auto-generated from validation rules for `title`. Must not be greater than 255 characters.'
example: b
required:
- title
security: []
delete:
summary: 'Delete a question set from a Card Game module.'
operationId: deleteAQuestionSetFromACardGameModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: setId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/admin/program/{id}/structure/{structureId}/card-game/question-sets/{setId}/questions':
get:
summary: 'List questions in a Card Game question set.'
operationId: listQuestionsInACardGameQuestionSet
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Program Structure'
security: []
post:
summary: 'Add a question to a Card Game question set.'
operationId: addAQuestionToACardGameQuestionSet
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
type:
type: string
description: 'Auto-generated from validation rules for `type`.'
example: dropdown
enum:
- descriptive
- multi_choice
- single_choice
- dropdown
question_text:
type: string
description: 'Auto-generated from validation rules for `question_text`. Must not be greater than 2000 characters.'
example: b
options:
type: array
description: 'Auto-generated from validation rules for `options.*`. Must not be greater than 500 characters.'
example:
- 'n'
items:
type: string
required:
- type
- question_text
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: setId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/admin/program/{id}/structure/{structureId}/card-game/question-sets/{setId}/questions/reorder':
put:
summary: 'Reorder questions in a Card Game question set.'
operationId: reorderQuestionsInACardGameQuestionSet
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
order:
type: array
description: 'Auto-generated from validation rules for `order.*`. The id of an existing record in the program_structure_card_game_questions table.'
example:
- 16
items:
type: integer
security: []
patch:
summary: 'Reorder questions in a Card Game question set.'
operationId: reorderQuestionsInACardGameQuestionSet
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
order:
type: array
description: 'Auto-generated from validation rules for `order.*`. The id of an existing record in the program_structure_card_game_questions table.'
example:
- 16
items:
type: integer
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: setId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/admin/program/{id}/structure/{structureId}/card-game/question-sets/{setId}/questions/{questionId}':
put:
summary: 'Update a question in a Card Game question set.'
operationId: updateAQuestionInACardGameQuestionSet
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
type:
type: string
description: 'Auto-generated from validation rules for `type`.'
example: descriptive
enum:
- descriptive
- multi_choice
- single_choice
- dropdown
question_text:
type: string
description: 'Auto-generated from validation rules for `question_text`. Must not be greater than 2000 characters.'
example: b
options:
type: array
description: 'Auto-generated from validation rules for `options.*`. Must not be greater than 500 characters.'
example:
- 'n'
items:
type: string
required:
- type
- question_text
security: []
patch:
summary: 'Update a question in a Card Game question set.'
operationId: updateAQuestionInACardGameQuestionSet
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
type:
type: string
description: 'Auto-generated from validation rules for `type`.'
example: descriptive
enum:
- descriptive
- multi_choice
- single_choice
- dropdown
question_text:
type: string
description: 'Auto-generated from validation rules for `question_text`. Must not be greater than 2000 characters.'
example: b
options:
type: array
description: 'Auto-generated from validation rules for `options.*`. Must not be greater than 500 characters.'
example:
- 'n'
items:
type: string
required:
- type
- question_text
security: []
delete:
summary: 'Delete a question from a Card Game question set.'
operationId: deleteAQuestionFromACardGameQuestionSet
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: setId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: questionId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/admin/program/{id}/structure/{structureId}/card-game/cards':
get:
summary: 'List cards for a Card Game module.'
operationId: listCardsForACardGameModule
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Program Structure'
security: []
post:
summary: 'Add a new card to a Card Game module.'
operationId: addANewCardToACardGameModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Auto-generated from validation rules for `name`. Must not be greater than 255 characters.'
example: b
description:
type: string
description: 'Auto-generated from validation rules for `description`.'
example: 'Eius et animi quos velit et.'
nullable: true
required:
- name
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/admin/program/{id}/structure/{structureId}/card-game/cards/reorder':
put:
summary: 'Reorder cards in a Card Game module.'
operationId: reorderCardsInACardGameModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
security: []
patch:
summary: 'Reorder cards in a Card Game module.'
operationId: reorderCardsInACardGameModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/admin/program/{id}/structure/{structureId}/card-game/cards/{cardId}':
put:
summary: 'Update a card in a Card Game module.'
operationId: updateACardInACardGameModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Auto-generated from validation rules for `name`. Must not be greater than 255 characters.'
example: b
description:
type: string
description: 'Auto-generated from validation rules for `description`.'
example: 'Eius et animi quos velit et.'
nullable: true
security: []
patch:
summary: 'Update a card in a Card Game module.'
operationId: updateACardInACardGameModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Auto-generated from validation rules for `name`. Must not be greater than 255 characters.'
example: b
description:
type: string
description: 'Auto-generated from validation rules for `description`.'
example: 'Eius et animi quos velit et.'
nullable: true
security: []
delete:
summary: 'Delete a card from a Card Game module.'
operationId: deleteACardFromACardGameModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: cardId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/admin/program/{id}/structure/{structureId}/upload-documents':
get:
summary: 'List documents for an Upload Documents module.'
operationId: listDocumentsForAnUploadDocumentsModule
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Program Structure'
security: []
post:
summary: 'Upload one or more documents to an Upload Documents module.'
operationId: uploadOneOrMoreDocumentsToAnUploadDocumentsModule
description: "Single file: multipart field \"file\" (optional \"original_name\").\nMultiple files: multipart field \"files[]\" (array of files)."
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: false
content:
multipart/form-data:
schema:
type: object
properties:
file:
type: string
format: binary
description: 'Auto-generated from validation rules for `file`. Must be a file. Must not be greater than 20480 kilobytes.'
nullable: true
files:
type: array
description: 'Auto-generated from validation rules for `files.*`. Must be a file. Must not be greater than 20480 kilobytes.'
items:
type: string
format: binary
original_name:
type: string
description: 'Auto-generated from validation rules for `original_name`. Must not be greater than 255 characters.'
example: b
nullable: true
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/admin/program/{id}/structure/{structureId}/upload-documents/reorder':
put:
summary: 'Reorder documents in an Upload Documents module.'
operationId: reorderDocumentsInAnUploadDocumentsModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
order:
type: array
description: 'Auto-generated from validation rules for `order.*`.'
example:
- 16
items:
type: integer
security: []
patch:
summary: 'Reorder documents in an Upload Documents module.'
operationId: reorderDocumentsInAnUploadDocumentsModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
order:
type: array
description: 'Auto-generated from validation rules for `order.*`.'
example:
- 16
items:
type: integer
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/admin/program/{id}/structure/{structureId}/upload-documents/{documentId}':
put:
summary: 'Update a document (e.g. display name) in an Upload Documents module.'
operationId: updateADocumentegDisplayNameInAnUploadDocumentsModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
original_name:
type: string
description: 'Auto-generated from validation rules for `original_name`. Must not be greater than 255 characters.'
example: b
nullable: true
security: []
patch:
summary: 'Update a document (e.g. display name) in an Upload Documents module.'
operationId: updateADocumentegDisplayNameInAnUploadDocumentsModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
original_name:
type: string
description: 'Auto-generated from validation rules for `original_name`. Must not be greater than 255 characters.'
example: b
nullable: true
security: []
delete:
summary: 'Delete a document from an Upload Documents module.'
operationId: deleteADocumentFromAnUploadDocumentsModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: documentId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/admin/program/{id}/structure/{structureId}/wheel-of-life/elements':
get:
summary: 'List life elements for a Wheel of Life module.'
operationId: listLifeElementsForAWheelOfLifeModule
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Program Structure'
security: []
post:
summary: 'Add a life element to a Wheel of Life module.'
operationId: addALifeElementToAWheelOfLifeModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Auto-generated from validation rules for `name`. Must not be greater than 255 characters.'
example: b
required:
- name
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/admin/program/{id}/structure/{structureId}/wheel-of-life/elements/reorder':
put:
summary: 'Reorder life elements in a Wheel of Life module.'
operationId: reorderLifeElementsInAWheelOfLifeModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
order:
type: array
description: 'Auto-generated from validation rules for `order.*`. The id of an existing record in the program_structure_wol_elements table.'
example:
- 16
items:
type: integer
security: []
patch:
summary: 'Reorder life elements in a Wheel of Life module.'
operationId: reorderLifeElementsInAWheelOfLifeModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
order:
type: array
description: 'Auto-generated from validation rules for `order.*`. The id of an existing record in the program_structure_wol_elements table.'
example:
- 16
items:
type: integer
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/admin/program/{id}/structure/{structureId}/wheel-of-life/elements/{elementId}':
put:
summary: 'Update a life element in a Wheel of Life module.'
operationId: updateALifeElementInAWheelOfLifeModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Auto-generated from validation rules for `name`. Must not be greater than 255 characters.'
example: b
required:
- name
security: []
patch:
summary: 'Update a life element in a Wheel of Life module.'
operationId: updateALifeElementInAWheelOfLifeModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Auto-generated from validation rules for `name`. Must not be greater than 255 characters.'
example: b
required:
- name
security: []
delete:
summary: 'Delete a life element from a Wheel of Life module.'
operationId: deleteALifeElementFromAWheelOfLifeModule
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: elementId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/admin/program/{id}/structure/{structureId}/wheel-of-life/elements/{elementId}/questions':
get:
summary: 'List questions for a Wheel of Life life element.'
operationId: listQuestionsForAWheelOfLifeLifeElement
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Program Structure'
security: []
post:
summary: 'Add a question to a Wheel of Life life element.'
operationId: addAQuestionToAWheelOfLifeLifeElement
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
type:
type: string
description: 'Auto-generated from validation rules for `type`.'
example: dropdown
enum:
- descriptive
- multi_choice
- single_choice
- dropdown
question_text:
type: string
description: 'Auto-generated from validation rules for `question_text`. Must not be greater than 2000 characters.'
example: b
options:
type: array
description: 'Auto-generated from validation rules for `options.*`. Must not be greater than 500 characters.'
example:
- 'n'
items:
type: string
required:
- type
- question_text
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: elementId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/admin/program/{id}/structure/{structureId}/wheel-of-life/elements/{elementId}/questions/reorder':
put:
summary: 'Reorder questions in a Wheel of Life life element.'
operationId: reorderQuestionsInAWheelOfLifeLifeElement
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
order:
type: array
description: 'Auto-generated from validation rules for `order.*`. The id of an existing record in the program_structure_wol_questions table.'
example:
- 16
items:
type: integer
security: []
patch:
summary: 'Reorder questions in a Wheel of Life life element.'
operationId: reorderQuestionsInAWheelOfLifeLifeElement
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
order:
type: array
description: 'Auto-generated from validation rules for `order.*`. The id of an existing record in the program_structure_wol_questions table.'
example:
- 16
items:
type: integer
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: elementId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/admin/program/{id}/structure/{structureId}/wheel-of-life/elements/{elementId}/questions/{questionId}':
put:
summary: 'Update a question in a Wheel of Life life element.'
operationId: updateAQuestionInAWheelOfLifeLifeElement
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
type:
type: string
description: 'Auto-generated from validation rules for `type`.'
example: single_choice
enum:
- descriptive
- multi_choice
- single_choice
- dropdown
question_text:
type: string
description: 'Auto-generated from validation rules for `question_text`. Must not be greater than 2000 characters.'
example: b
options:
type: array
description: 'Auto-generated from validation rules for `options.*`. Must not be greater than 500 characters.'
example:
- 'n'
items:
type: string
required:
- type
- question_text
security: []
patch:
summary: 'Update a question in a Wheel of Life life element.'
operationId: updateAQuestionInAWheelOfLifeLifeElement
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
type:
type: string
description: 'Auto-generated from validation rules for `type`.'
example: dropdown
enum:
- descriptive
- multi_choice
- single_choice
- dropdown
question_text:
type: string
description: 'Auto-generated from validation rules for `question_text`. Must not be greater than 2000 characters.'
example: b
options:
type: array
description: 'Auto-generated from validation rules for `options.*`. Must not be greater than 500 characters.'
example:
- 'n'
items:
type: string
required:
- type
- question_text
security: []
delete:
summary: 'Delete a question from a Wheel of Life life element.'
operationId: deleteAQuestionFromAWheelOfLifeLifeElement
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: elementId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: questionId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/admin/program/{id}/structure/{structureId}/intermediate-values':
get:
summary: 'Program-specific intermediate Values page – show.'
operationId: programSpecificIntermediateValuesPageShow
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Program Structure'
security: []
put:
summary: 'Program-specific intermediate Values page – update.'
operationId: programSpecificIntermediateValuesPageUpdate
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
headline:
type: string
description: 'Auto-generated from validation rules for `headline`. Must not be greater than 255 characters.'
example: b
points:
type: array
description: 'Auto-generated from validation rules for `points`.'
example: null
items:
type: object
nullable: true
properties:
id:
type: integer
description: 'Auto-generated from validation rules for `points.*.id`. The id of an existing record in the values_intermediate_points table.'
example: 16
nullable: true
description:
type: string
description: 'Auto-generated from validation rules for `points.*.description`. Must not be greater than 5000 characters.'
example: 'Et animi quos velit et fugiat.'
nullable: true
sort_order:
type: integer
description: 'Auto-generated from validation rules for `points.*.sort_order`. Must be at least 0.'
example: 42
nullable: true
required:
- headline
security: []
patch:
summary: 'Program-specific intermediate Values page – update.'
operationId: programSpecificIntermediateValuesPageUpdate
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
headline:
type: string
description: 'Auto-generated from validation rules for `headline`. Must not be greater than 255 characters.'
example: b
points:
type: array
description: 'Auto-generated from validation rules for `points`.'
example: null
items:
type: object
nullable: true
properties:
id:
type: integer
description: 'Auto-generated from validation rules for `points.*.id`. The id of an existing record in the values_intermediate_points table.'
example: 16
nullable: true
description:
type: string
description: 'Auto-generated from validation rules for `points.*.description`. Must not be greater than 5000 characters.'
example: 'Et animi quos velit et fugiat.'
nullable: true
sort_order:
type: integer
description: 'Auto-generated from validation rules for `points.*.sort_order`. Must be at least 0.'
example: 42
nullable: true
required:
- headline
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/admin/program/{id}/structure/{structureId}/intermediate-eight-most-common-mistakes':
get:
summary: 'Program-specific intermediate Eight most common mistakes page – show.'
operationId: programSpecificIntermediateEightMostCommonMistakesPageShow
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Program Structure'
security: []
put:
summary: 'Program-specific intermediate Eight most common mistakes page – update.'
operationId: programSpecificIntermediateEightMostCommonMistakesPageUpdate
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
headline:
type: string
description: 'Auto-generated from validation rules for `headline`. Must not be greater than 255 characters.'
example: b
mistakes:
type: array
description: 'Auto-generated from validation rules for `mistakes`.'
example: null
items:
type: object
nullable: true
properties:
id:
type: integer
description: 'Auto-generated from validation rules for `mistakes.*.id`. The id of an existing record in the eight_common_mistakes table.'
example: 16
nullable: true
description:
type: string
description: 'Auto-generated from validation rules for `mistakes.*.description`. Must not be greater than 5000 characters.'
example: 'Et animi quos velit et fugiat.'
nullable: true
sort_order:
type: integer
description: 'Auto-generated from validation rules for `mistakes.*.sort_order`. Must be at least 0.'
example: 42
nullable: true
required:
- headline
security: []
patch:
summary: 'Program-specific intermediate Eight most common mistakes page – update.'
operationId: programSpecificIntermediateEightMostCommonMistakesPageUpdate
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
headline:
type: string
description: 'Auto-generated from validation rules for `headline`. Must not be greater than 255 characters.'
example: b
mistakes:
type: array
description: 'Auto-generated from validation rules for `mistakes`.'
example: null
items:
type: object
nullable: true
properties:
id:
type: integer
description: 'Auto-generated from validation rules for `mistakes.*.id`. The id of an existing record in the eight_common_mistakes table.'
example: 16
nullable: true
description:
type: string
description: 'Auto-generated from validation rules for `mistakes.*.description`. Must not be greater than 5000 characters.'
example: 'Et animi quos velit et fugiat.'
nullable: true
sort_order:
type: integer
description: 'Auto-generated from validation rules for `mistakes.*.sort_order`. Must be at least 0.'
example: 42
nullable: true
required:
- headline
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/admin/program/{id}/structure/{structureId}/intermediate-goal-settings':
get:
summary: 'Program-specific intermediate Goal Settings page – show.'
operationId: programSpecificIntermediateGoalSettingsPageShow
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Program Structure'
security: []
put:
summary: 'Program-specific intermediate Goal Settings page – update.'
operationId: programSpecificIntermediateGoalSettingsPageUpdate
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
headline:
type: string
description: 'Auto-generated from validation rules for `headline`. Must not be greater than 255 characters.'
example: b
quote:
type: string
description: 'Auto-generated from validation rules for `quote`. Must not be greater than 500 characters.'
example: 'n'
nullable: true
sub_heading_1:
type: string
description: 'Auto-generated from validation rules for `sub_heading_1`. Must not be greater than 255 characters.'
example: g
nullable: true
sub_heading_2:
type: string
description: 'Auto-generated from validation rules for `sub_heading_2`. Must not be greater than 255 characters.'
example: z
nullable: true
description_2:
type: string
description: 'Auto-generated from validation rules for `description_2`. Must not be greater than 10000 characters.'
example: m
nullable: true
options:
type: array
description: 'Auto-generated from validation rules for `options`.'
example: null
items:
type: object
nullable: true
properties:
id:
type: integer
description: 'Auto-generated from validation rules for `options.*.id`. The id of an existing record in the goal_settings_intermediate_options table.'
example: 16
nullable: true
description:
type: string
description: 'Auto-generated from validation rules for `options.*.description`. Must not be greater than 5000 characters.'
example: 'Et animi quos velit et fugiat.'
nullable: true
sort_order:
type: integer
description: 'Auto-generated from validation rules for `options.*.sort_order`. Must be at least 0.'
example: 42
nullable: true
required:
- headline
security: []
patch:
summary: 'Program-specific intermediate Goal Settings page – update.'
operationId: programSpecificIntermediateGoalSettingsPageUpdate
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
headline:
type: string
description: 'Auto-generated from validation rules for `headline`. Must not be greater than 255 characters.'
example: b
quote:
type: string
description: 'Auto-generated from validation rules for `quote`. Must not be greater than 500 characters.'
example: 'n'
nullable: true
sub_heading_1:
type: string
description: 'Auto-generated from validation rules for `sub_heading_1`. Must not be greater than 255 characters.'
example: g
nullable: true
sub_heading_2:
type: string
description: 'Auto-generated from validation rules for `sub_heading_2`. Must not be greater than 255 characters.'
example: z
nullable: true
description_2:
type: string
description: 'Auto-generated from validation rules for `description_2`. Must not be greater than 10000 characters.'
example: m
nullable: true
options:
type: array
description: 'Auto-generated from validation rules for `options`.'
example: null
items:
type: object
nullable: true
properties:
id:
type: integer
description: 'Auto-generated from validation rules for `options.*.id`. The id of an existing record in the goal_settings_intermediate_options table.'
example: 16
nullable: true
description:
type: string
description: 'Auto-generated from validation rules for `options.*.description`. Must not be greater than 5000 characters.'
example: 'Et animi quos velit et fugiat.'
nullable: true
sort_order:
type: integer
description: 'Auto-generated from validation rules for `options.*.sort_order`. Must be at least 0.'
example: 42
nullable: true
required:
- headline
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/admin/program/{id}/structure/{structureId}/intermediate-questions-goal-why':
get:
summary: 'Program-specific intermediate Questions Goal Why page – show.'
operationId: programSpecificIntermediateQuestionsGoalWhyPageShow
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Program Structure'
security: []
put:
summary: 'Program-specific intermediate Questions Goal Why page – update.'
operationId: programSpecificIntermediateQuestionsGoalWhyPageUpdate
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
headline_1:
type: string
description: 'Auto-generated from validation rules for `headline_1`. Must not be greater than 255 characters.'
example: b
nullable: true
headline_2:
type: string
description: 'Auto-generated from validation rules for `headline_2`. Must not be greater than 255 characters.'
example: 'n'
nullable: true
headline_3:
type: string
description: 'Auto-generated from validation rules for `headline_3`. Must not be greater than 255 characters.'
example: g
nullable: true
headline_4:
type: string
description: 'Auto-generated from validation rules for `headline_4`. Must not be greater than 255 characters.'
example: z
nullable: true
headline_5:
type: string
description: 'Auto-generated from validation rules for `headline_5`. Must not be greater than 255 characters.'
example: m
nullable: true
question_heading_1:
type: string
description: 'Auto-generated from validation rules for `question_heading_1`. Must not be greater than 255 characters.'
example: i
nullable: true
question_description_1:
type: string
description: 'Auto-generated from validation rules for `question_description_1`. Must not be greater than 5000 characters.'
example: 'y'
nullable: true
question_heading_2:
type: string
description: 'Auto-generated from validation rules for `question_heading_2`. Must not be greater than 255 characters.'
example: v
nullable: true
question_description_2:
type: string
description: 'Auto-generated from validation rules for `question_description_2`. Must not be greater than 5000 characters.'
example: d
nullable: true
question_heading_3:
type: string
description: 'Auto-generated from validation rules for `question_heading_3`. Must not be greater than 255 characters.'
example: l
nullable: true
question_description_3:
type: string
description: 'Auto-generated from validation rules for `question_description_3`. Must not be greater than 5000 characters.'
example: j
nullable: true
quote:
type: string
description: 'Auto-generated from validation rules for `quote`. Must not be greater than 2000 characters.'
example: 'n'
nullable: true
security: []
patch:
summary: 'Program-specific intermediate Questions Goal Why page – update.'
operationId: programSpecificIntermediateQuestionsGoalWhyPageUpdate
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
headline_1:
type: string
description: 'Auto-generated from validation rules for `headline_1`. Must not be greater than 255 characters.'
example: b
nullable: true
headline_2:
type: string
description: 'Auto-generated from validation rules for `headline_2`. Must not be greater than 255 characters.'
example: 'n'
nullable: true
headline_3:
type: string
description: 'Auto-generated from validation rules for `headline_3`. Must not be greater than 255 characters.'
example: g
nullable: true
headline_4:
type: string
description: 'Auto-generated from validation rules for `headline_4`. Must not be greater than 255 characters.'
example: z
nullable: true
headline_5:
type: string
description: 'Auto-generated from validation rules for `headline_5`. Must not be greater than 255 characters.'
example: m
nullable: true
question_heading_1:
type: string
description: 'Auto-generated from validation rules for `question_heading_1`. Must not be greater than 255 characters.'
example: i
nullable: true
question_description_1:
type: string
description: 'Auto-generated from validation rules for `question_description_1`. Must not be greater than 5000 characters.'
example: 'y'
nullable: true
question_heading_2:
type: string
description: 'Auto-generated from validation rules for `question_heading_2`. Must not be greater than 255 characters.'
example: v
nullable: true
question_description_2:
type: string
description: 'Auto-generated from validation rules for `question_description_2`. Must not be greater than 5000 characters.'
example: d
nullable: true
question_heading_3:
type: string
description: 'Auto-generated from validation rules for `question_heading_3`. Must not be greater than 255 characters.'
example: l
nullable: true
question_description_3:
type: string
description: 'Auto-generated from validation rules for `question_description_3`. Must not be greater than 5000 characters.'
example: j
nullable: true
quote:
type: string
description: 'Auto-generated from validation rules for `quote`. Must not be greater than 2000 characters.'
example: 'n'
nullable: true
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/admin/program/{id}/structure/{structureId}/intermediate-y-method':
get:
summary: 'Program-specific intermediate Y Method page – show.'
operationId: programSpecificIntermediateYMethodPageShow
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Program Structure'
security: []
put:
summary: 'Program-specific intermediate Y Method page – update.'
operationId: programSpecificIntermediateYMethodPageUpdate
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
headline:
type: string
description: 'Auto-generated from validation rules for `headline`. Must not be greater than 255 characters.'
example: b
steps:
type: array
description: 'Auto-generated from validation rules for `steps`.'
example: null
items:
type: object
nullable: true
properties:
id:
type: integer
description: 'Auto-generated from validation rules for `steps.*.id`. The id of an existing record in the program_y_method_steps table.'
example: 16
nullable: true
description:
type: string
description: 'Auto-generated from validation rules for `steps.*.description`. Must not be greater than 5000 characters.'
example: 'Et animi quos velit et fugiat.'
nullable: true
sort_order:
type: integer
description: 'Auto-generated from validation rules for `steps.*.sort_order`. Must be at least 0.'
example: 42
nullable: true
required:
- headline
security: []
patch:
summary: 'Program-specific intermediate Y Method page – update.'
operationId: programSpecificIntermediateYMethodPageUpdate
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
headline:
type: string
description: 'Auto-generated from validation rules for `headline`. Must not be greater than 255 characters.'
example: b
steps:
type: array
description: 'Auto-generated from validation rules for `steps`.'
example: null
items:
type: object
nullable: true
properties:
id:
type: integer
description: 'Auto-generated from validation rules for `steps.*.id`. The id of an existing record in the program_y_method_steps table.'
example: 16
nullable: true
description:
type: string
description: 'Auto-generated from validation rules for `steps.*.description`. Must not be greater than 5000 characters.'
example: 'Et animi quos velit et fugiat.'
nullable: true
sort_order:
type: integer
description: 'Auto-generated from validation rules for `steps.*.sort_order`. Must be at least 0.'
example: 42
nullable: true
required:
- headline
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/admin/program/{id}/structure/{structureId}/intermediate-steps/complete-setup':
post:
summary: 'Complete setup for an intermediate module: choose global vs specific.'
operationId: completeSetupForAnIntermediateModuleChooseGlobalVsSpecific
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Program Structure'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the program.'
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
/api/v1/admin/payout:
get:
summary: ''
operationId: getApiV1AdminPayout
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Payouts'
security: []
/api/v1/admin/payout/settings:
get:
summary: ''
operationId: getApiV1AdminPayoutSettings
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Payouts'
security: []
put:
summary: ''
operationId: putApiV1AdminPayoutSettings
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Payouts'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
global_commission_rate:
type: number
description: 'Auto-generated from validation rules for `global_commission_rate`. Must be at least 0. Must not be greater than 100.'
example: 1
nullable: true
payout_frequency:
type: string
description: 'Auto-generated from validation rules for `payout_frequency`.'
example: 7_days
enum:
- 7_days
- 14_days
- monthly
nullable: true
security: []
patch:
summary: ''
operationId: patchApiV1AdminPayoutSettings
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Payouts'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
global_commission_rate:
type: number
description: 'Auto-generated from validation rules for `global_commission_rate`. Must be at least 0. Must not be greater than 100.'
example: 1
nullable: true
payout_frequency:
type: string
description: 'Auto-generated from validation rules for `payout_frequency`.'
example: 14_days
enum:
- 7_days
- 14_days
- monthly
nullable: true
security: []
'/api/v1/admin/payout/{id}':
get:
summary: ''
operationId: getApiV1AdminPayoutId
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Payouts'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the payout.'
example: architecto
required: true
schema:
type: string
'/api/v1/admin/payout/{id}/status':
post:
summary: ''
operationId: postApiV1AdminPayoutIdStatus
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Payouts'
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
status:
type: string
description: 'Auto-generated from validation rules for `status`.'
example: paid
enum:
- unpaid
- paid
transaction_number:
type: string
description: 'Auto-generated from validation rules for `transaction_number`. Must not be greater than 120 characters.'
example: b
nullable: true
payment_receipt:
type: string
format: binary
description: 'Auto-generated from validation rules for `payment_receipt`. Must be a file. Must not be greater than 4096 kilobytes.'
nullable: true
payment_notes:
type: string
description: 'Auto-generated from validation rules for `payment_notes`. Must not be greater than 2000 characters.'
example: 'n'
nullable: true
required:
- status
security: []
parameters:
-
in: path
name: id
description: 'The ID of the payout.'
example: architecto
required: true
schema:
type: string
/api/v1/admin/quote-category/quotes:
get:
summary: 'Get list of quotes'
operationId: getListOfQuotes
description: ''
parameters:
-
in: query
name: page
description: 'The page number.'
example: 1
required: false
schema:
type: integer
description: 'The page number.'
example: 1
-
in: query
name: per_page
description: 'Number of items per page.'
example: 15
required: false
schema:
type: integer
description: 'Number of items per page.'
example: 15
-
in: query
name: quote_category_id
description: 'optional Filter by quote category.'
example: 1
required: false
schema:
type: integer
description: 'optional Filter by quote category.'
example: 1
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Quote Management'
security: []
post:
summary: 'Create a new quote'
operationId: createANewQuote
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Quote Management'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
quote_category_id:
type: integer
description: 'Quote category ID.'
example: 1
quote:
type: string
description: 'The quote text.'
example: 'The only way to do great work is to love what you do.'
required:
- quote_category_id
- quote
security: []
'/api/v1/admin/quote-category/quotes/{id}':
get:
summary: 'Get a specific quote'
operationId: getASpecificQuote
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Quote Management'
security: []
put:
summary: 'Update a quote'
operationId: updateAQuote
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Quote Management'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
quote_category_id:
type: integer
description: 'optional Quote category ID.'
example: 16
quote:
type: string
description: 'optional The quote text.'
example: architecto
security: []
patch:
summary: 'Update a quote'
operationId: updateAQuote
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Quote Management'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
quote_category_id:
type: integer
description: 'optional Quote category ID.'
example: 16
quote:
type: string
description: 'optional The quote text.'
example: architecto
security: []
delete:
summary: 'Delete a quote'
operationId: deleteAQuote
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Quote Management'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the quote.'
example: 1
required: true
schema:
type: integer
/api/v1/admin/quote-category:
get:
summary: 'Get list of quote categories (with quotes count)'
operationId: getListOfQuoteCategorieswithQuotesCount
description: ''
parameters:
-
in: query
name: page
description: 'The page number.'
example: 1
required: false
schema:
type: integer
description: 'The page number.'
example: 1
-
in: query
name: per_page
description: 'Number of items per page.'
example: 15
required: false
schema:
type: integer
description: 'Number of items per page.'
example: 15
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Quote Category Management'
security: []
post:
summary: 'Create a new quote category'
operationId: createANewQuoteCategory
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Quote Category Management'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The quote category name.'
example: Motivation
required:
- name
security: []
'/api/v1/admin/quote-category/{id}':
get:
summary: 'Get a specific quote category'
operationId: getASpecificQuoteCategory
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Quote Category Management'
security: []
put:
summary: 'Update a quote category'
operationId: updateAQuoteCategory
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Quote Category Management'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'optional The quote category name.'
example: architecto
security: []
patch:
summary: 'Update a quote category'
operationId: updateAQuoteCategory
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Quote Category Management'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'optional The quote category name.'
example: architecto
security: []
delete:
summary: 'Delete a quote category'
operationId: deleteAQuoteCategory
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Quote Category Management'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the quote category.'
example: 1
required: true
schema:
type: integer
/api/v1/admin/shift:
get:
summary: 'Get list of all shifts'
operationId: getListOfAllShifts
description: ''
parameters:
-
in: query
name: page
description: 'The page number.'
example: 1
required: false
schema:
type: integer
description: 'The page number.'
example: 1
-
in: query
name: per_page
description: 'Number of items per page.'
example: 15
required: false
schema:
type: integer
description: 'Number of items per page.'
example: 15
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Shift Management'
security: []
post:
summary: 'Create a new shift'
operationId: createANewShift
description: 'By default the shift is applied to all working days. Pass working_days to restrict to specific days (0-6).'
parameters: []
responses: { }
tags:
- 'Admin - Shift Management'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Shift name.'
example: 'Morning Shift'
start_time:
type: string
description: 'Start time (HH:MM).'
example: '09:00'
end_time:
type: string
description: 'End time (HH:MM).'
example: '17:00'
working_days:
type: array
description: 'optional Day numbers (0-6). Omit to apply to all working days.'
example:
- 1
- 2
- 3
- 4
- 5
items:
type: string
required:
- name
- start_time
- end_time
security: []
'/api/v1/admin/shift/{id}':
get:
summary: 'Get a specific shift'
operationId: getASpecificShift
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Shift Management'
security: []
put:
summary: 'Update a shift'
operationId: updateAShift
description: 'Pass working_days to set which days (0-6) the shift applies to. Omit to leave days unchanged.'
parameters: []
responses: { }
tags:
- 'Admin - Shift Management'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Auto-generated from validation rules for `name`. Must not be greater than 255 characters.'
example: b
start_time:
type: string
description: 'Auto-generated from validation rules for `start_time`. Must be a valid date in the format H:i.'
example: '17:16'
end_time:
type: string
description: 'Auto-generated from validation rules for `end_time`. Must be a valid date in the format H:i.'
example: '17:16'
working_days:
type: array
description: 'Auto-generated from validation rules for `working_days.*`. Must be at least 0. Must not be greater than 6.'
example:
- 4
items:
type: integer
security: []
patch:
summary: 'Update a shift'
operationId: updateAShift
description: 'Pass working_days to set which days (0-6) the shift applies to. Omit to leave days unchanged.'
parameters: []
responses: { }
tags:
- 'Admin - Shift Management'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Auto-generated from validation rules for `name`. Must not be greater than 255 characters.'
example: b
start_time:
type: string
description: 'Auto-generated from validation rules for `start_time`. Must be a valid date in the format H:i.'
example: '17:16'
end_time:
type: string
description: 'Auto-generated from validation rules for `end_time`. Must be a valid date in the format H:i.'
example: '17:16'
working_days:
type: array
description: 'Auto-generated from validation rules for `working_days.*`. Must be at least 0. Must not be greater than 6.'
example:
- 4
items:
type: integer
security: []
delete:
summary: 'Delete a shift'
operationId: deleteAShift
description: ''
parameters: []
responses: { }
tags:
- 'Admin - Shift Management'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the shift.'
example: architecto
required: true
schema:
type: string
/api/v1/shift:
get:
summary: 'List shifts'
operationId: listShifts
description: "Returns all shifts with their name, start/end time and working day numbers.\nOptionally filter by day_of_week (0-6) to get shifts that apply to that day."
parameters:
-
in: query
name: page
description: 'The page number.'
example: 1
required: false
schema:
type: integer
description: 'The page number.'
example: 1
-
in: query
name: per_page
description: 'Number of items per page.'
example: 15
required: false
schema:
type: integer
description: 'Number of items per page.'
example: 15
-
in: query
name: day_of_week
description: 'Filter shifts that apply to this day (0=Sunday..6=Saturday).'
example: 1
required: false
schema:
type: integer
description: 'Filter shifts that apply to this day (0=Sunday..6=Saturday).'
example: 1
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Shifts retrieved successfully'
data:
current_page: 1
data: []
first_page_url: 'https://ruhline-api.test/api/v1/shift?page=1'
from: null
last_page: 1
last_page_url: 'https://ruhline-api.test/api/v1/shift?page=1'
links:
-
url: null
label: '« Previous'
page: null
active: false
-
url: 'https://ruhline-api.test/api/v1/shift?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Next »'
page: null
active: false
next_page_url: null
path: 'https://ruhline-api.test/api/v1/shift'
per_page: 15
prev_page_url: null
to: null
total: 0
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Shifts retrieved successfully'
data:
type: object
properties:
current_page:
type: integer
example: 1
data:
type: array
example: []
first_page_url:
type: string
example: 'https://ruhline-api.test/api/v1/shift?page=1'
from:
type: string
example: null
nullable: true
last_page:
type: integer
example: 1
last_page_url:
type: string
example: 'https://ruhline-api.test/api/v1/shift?page=1'
links:
type: array
example:
-
url: null
label: '« Previous'
page: null
active: false
-
url: 'https://ruhline-api.test/api/v1/shift?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Next »'
page: null
active: false
items:
type: object
properties:
url:
type: string
example: null
nullable: true
label:
type: string
example: '« Previous'
page:
type: string
example: null
nullable: true
active:
type: boolean
example: false
next_page_url:
type: string
example: null
nullable: true
path:
type: string
example: 'https://ruhline-api.test/api/v1/shift'
per_page:
type: integer
example: 15
prev_page_url:
type: string
example: null
nullable: true
to:
type: string
example: null
nullable: true
total:
type: integer
example: 0
tags:
- 'Shifts (Public)'
security: []
'/api/v1/shift/{id}':
get:
summary: 'Get a single shift'
operationId: getASingleShift
description: ''
parameters: []
responses:
500:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Server Error'
properties:
message:
type: string
example: 'Server Error'
tags:
- 'Shifts (Public)'
security: []
parameters:
-
in: path
name: id
description: 'The ID of the shift.'
example: architecto
required: true
schema:
type: string
/api/v1/admin/site-setting:
get:
summary: 'Get site settings (admin)'
operationId: getSiteSettingsadmin
description: 'Returns the current site settings for editing.'
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Admin - Site Settings (CMS)'
security: []
put:
summary: 'Update site settings'
operationId: updateSiteSettings
description: "Update site settings. All fields are optional; only provided fields are updated.\nImage fields accept file uploads; text/URL fields accept strings."
parameters: []
responses:
200:
description: ''
content:
text/plain:
schema:
type: string
example: '{"success":true,"message":"Site settings updated successfully","data":{...}}'
422:
description: ''
content:
text/plain:
schema:
type: string
example: '{"success":false,"message":"Validation failed","errors":{...}}'
tags:
- 'Admin - Site Settings (CMS)'
requestBody:
required: false
content:
multipart/form-data:
schema:
type: object
properties:
favicon:
type: string
format: binary
description: 'optional Favicon image (ico, png, jpg, gif, svg).'
nullable: true
header_logo:
type: string
format: binary
description: 'optional Header logo image.'
nullable: true
page_header_image:
type: string
format: binary
description: 'optional Page header image.'
nullable: true
footer_logo:
type: string
format: binary
description: 'optional Footer logo image.'
nullable: true
footer_description:
type: string
description: 'optional Footer description text.'
example: 'Your fitness partner.'
nullable: true
copyright:
type: string
description: 'optional Copyright text.'
example: '© 2026 Company Name'
nullable: true
facebook_url:
type: string
description: 'optional Facebook profile URL.'
example: 'https://facebook.com/...'
nullable: true
instagram_url:
type: string
description: 'optional Instagram profile URL.'
example: 'https://instagram.com/...'
nullable: true
linkedin_url:
type: string
description: 'optional LinkedIn profile URL.'
example: 'https://linkedin.com/...'
nullable: true
address_line_1:
type: string
description: 'optional Address line 1.'
example: '123 Main St'
nullable: true
address_line_2:
type: string
description: 'optional Address line 2.'
example: 'Suite 100'
nullable: true
landmark:
type: string
description: 'optional Landmark.'
example: 'Near Central Park'
nullable: true
country_id:
type: integer
description: 'optional Country ID (from countries table).'
example: 1
nullable: true
state_id:
type: integer
description: 'optional State ID (from states table).'
example: 1
nullable: true
city_id:
type: integer
description: 'optional City ID (from cities table).'
example: 1
nullable: true
zipcode:
type: string
description: 'optional Zip/Postal code.'
example: '10001'
nullable: true
global_commission_rate:
type: number
description: 'optional Global commission rate for coaches (0-100%).'
example: 10.5
nullable: true
payout_frequency:
type: string
description: 'Auto-generated from validation rules for `payout_frequency`.'
example: 7_days
enum:
- 7_days
- 14_days
- monthly
nullable: true
security: []
patch:
summary: 'Update site settings'
operationId: updateSiteSettings
description: "Update site settings. All fields are optional; only provided fields are updated.\nImage fields accept file uploads; text/URL fields accept strings."
parameters: []
responses:
200:
description: ''
content:
text/plain:
schema:
type: string
example: '{"success":true,"message":"Site settings updated successfully","data":{...}}'
422:
description: ''
content:
text/plain:
schema:
type: string
example: '{"success":false,"message":"Validation failed","errors":{...}}'
tags:
- 'Admin - Site Settings (CMS)'
requestBody:
required: false
content:
multipart/form-data:
schema:
type: object
properties:
favicon:
type: string
format: binary
description: 'optional Favicon image (ico, png, jpg, gif, svg).'
nullable: true
header_logo:
type: string
format: binary
description: 'optional Header logo image.'
nullable: true
page_header_image:
type: string
format: binary
description: 'optional Page header image.'
nullable: true
footer_logo:
type: string
format: binary
description: 'optional Footer logo image.'
nullable: true
footer_description:
type: string
description: 'optional Footer description text.'
example: 'Your fitness partner.'
nullable: true
copyright:
type: string
description: 'optional Copyright text.'
example: '© 2026 Company Name'
nullable: true
facebook_url:
type: string
description: 'optional Facebook profile URL.'
example: 'https://facebook.com/...'
nullable: true
instagram_url:
type: string
description: 'optional Instagram profile URL.'
example: 'https://instagram.com/...'
nullable: true
linkedin_url:
type: string
description: 'optional LinkedIn profile URL.'
example: 'https://linkedin.com/...'
nullable: true
address_line_1:
type: string
description: 'optional Address line 1.'
example: '123 Main St'
nullable: true
address_line_2:
type: string
description: 'optional Address line 2.'
example: 'Suite 100'
nullable: true
landmark:
type: string
description: 'optional Landmark.'
example: 'Near Central Park'
nullable: true
country_id:
type: integer
description: 'optional Country ID (from countries table).'
example: 1
nullable: true
state_id:
type: integer
description: 'optional State ID (from states table).'
example: 1
nullable: true
city_id:
type: integer
description: 'optional City ID (from cities table).'
example: 1
nullable: true
zipcode:
type: string
description: 'optional Zip/Postal code.'
example: '10001'
nullable: true
global_commission_rate:
type: number
description: 'optional Global commission rate for coaches (0-100%).'
example: 10.5
nullable: true
payout_frequency:
type: string
description: 'Auto-generated from validation rules for `payout_frequency`.'
example: 7_days
enum:
- 7_days
- 14_days
- monthly
nullable: true
security: []
/api/v1/site-setting:
get:
summary: 'Get site settings'
operationId: getSiteSettings
description: 'Returns the current site settings for the frontend (favicon, logos, footer, social links, address).'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Site settings retrieved successfully'
data:
id: 1
favicon: 'http://localhost/storage/favicon.ico'
header_logo: 'http://localhost/storage/site/header-logo.png'
page_header_image: 'http://localhost/storage/site/page-header.jpg'
footer_logo: 'http://localhost/storage/site/footer-logo.png'
footer_description: 'Your fitness partner.'
copyright: '© 2026 Company Name'
social_media:
facebook_url: 'https://facebook.com/...'
instagram_url: 'https://instagram.com/...'
linkedin_url: 'https://linkedin.com/...'
address:
address_line_1: '123 Main St'
address_line_2: 'Suite 100'
landmark: 'Near Central Park'
city: 'New York'
state: NY
country: USA
zipcode: '10001'
updated_at: '2026-02-04T10:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Site settings retrieved successfully'
data:
type: object
properties:
id:
type: integer
example: 1
favicon:
type: string
example: 'http://localhost/storage/favicon.ico'
header_logo:
type: string
example: 'http://localhost/storage/site/header-logo.png'
page_header_image:
type: string
example: 'http://localhost/storage/site/page-header.jpg'
footer_logo:
type: string
example: 'http://localhost/storage/site/footer-logo.png'
footer_description:
type: string
example: 'Your fitness partner.'
copyright:
type: string
example: '© 2026 Company Name'
social_media:
type: object
properties:
facebook_url:
type: string
example: 'https://facebook.com/...'
instagram_url:
type: string
example: 'https://instagram.com/...'
linkedin_url:
type: string
example: 'https://linkedin.com/...'
address:
type: object
properties:
address_line_1:
type: string
example: '123 Main St'
address_line_2:
type: string
example: 'Suite 100'
landmark:
type: string
example: 'Near Central Park'
city:
type: string
example: 'New York'
state:
type: string
example: NY
country:
type: string
example: USA
zipcode:
type: string
example: '10001'
updated_at:
type: string
example: '2026-02-04T10:00:00+00:00'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Site settings not found.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Site settings not found.'
tags:
- 'Site Settings (Public)'
security: []
/api/v1/admin/working-day:
get:
summary: 'Get working days configuration'
operationId: getWorkingDaysConfiguration
description: 'Returns all seven week days with their working/non-working status.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Working days retrieved successfully'
data:
days:
-
id: 1
day_of_week: 0
day_name: Sunday
is_working: false
updated_at: '2026-01-29T12:00:00+00:00'
-
id: 2
day_of_week: 1
day_name: Monday
is_working: true
updated_at: '2026-01-29T12:00:00+00:00'
working_day_numbers:
- 1
- 2
- 3
- 4
- 5
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Working days retrieved successfully'
data:
type: object
properties:
days:
type: array
example:
-
id: 1
day_of_week: 0
day_name: Sunday
is_working: false
updated_at: '2026-01-29T12:00:00+00:00'
-
id: 2
day_of_week: 1
day_name: Monday
is_working: true
updated_at: '2026-01-29T12:00:00+00:00'
items:
type: object
properties:
id:
type: integer
example: 1
day_of_week:
type: integer
example: 0
day_name:
type: string
example: Sunday
is_working:
type: boolean
example: false
updated_at:
type: string
example: '2026-01-29T12:00:00+00:00'
working_day_numbers:
type: array
example:
- 1
- 2
- 3
- 4
- 5
items:
type: integer
tags:
- 'Admin - Working Days Management'
security: []
put:
summary: 'Update working days'
operationId: updateWorkingDays
description: 'Mark which week days are working. Send an array of day numbers (0-6) that should be working; all others will be set to non-working.'
parameters: []
responses:
200:
description: ''
content:
text/plain:
schema:
type: string
example: '{"success":true,"message":"Working days updated successfully","data":{"days":[...],"working_day_numbers":[1,2,3,4,5]}}'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
working_days:
- 'At least one day selection is required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
working_days:
type: array
example:
- 'At least one day selection is required.'
items:
type: string
tags:
- 'Admin - Working Days Management'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
working_days:
type: array
description: 'Array of day-of-week numbers (0=Sunday .. 6=Saturday) that are working days.'
example:
- 1
- 2
- 3
- 4
- 5
items:
type: string
required:
- working_days
security: []
patch:
summary: 'Update working days'
operationId: updateWorkingDays
description: 'Mark which week days are working. Send an array of day numbers (0-6) that should be working; all others will be set to non-working.'
parameters: []
responses:
200:
description: ''
content:
text/plain:
schema:
type: string
example: '{"success":true,"message":"Working days updated successfully","data":{"days":[...],"working_day_numbers":[1,2,3,4,5]}}'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
working_days:
- 'At least one day selection is required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
working_days:
type: array
example:
- 'At least one day selection is required.'
items:
type: string
tags:
- 'Admin - Working Days Management'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
working_days:
type: array
description: 'Array of day-of-week numbers (0=Sunday .. 6=Saturday) that are working days.'
example:
- 1
- 2
- 3
- 4
- 5
items:
type: string
required:
- working_days
security: []
/api/v1/working-day:
get:
summary: 'Get working days configuration with shifts'
operationId: getWorkingDaysConfigurationWithShifts
description: 'Returns all seven week days with their working/non-working status and the shifts that apply to each day. No auth required.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Working days retrieved successfully'
data:
days:
-
id: 1
day_of_week: 0
day_name: Sunday
is_working: false
updated_at: ...
shifts: []
-
id: 2
day_of_week: 1
day_name: Monday
is_working: true
updated_at: ...
shifts:
-
id: 1
name: Morning
start_time: '09:00'
end_time: '17:00'
working_day_numbers:
- 1
- 2
- 3
- 4
- 5
created_at: ...
updated_at: ...
working_day_numbers:
- 1
- 2
- 3
- 4
- 5
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Working days retrieved successfully'
data:
type: object
properties:
days:
type: array
example:
-
id: 1
day_of_week: 0
day_name: Sunday
is_working: false
updated_at: ...
shifts: []
-
id: 2
day_of_week: 1
day_name: Monday
is_working: true
updated_at: ...
shifts:
-
id: 1
name: Morning
start_time: '09:00'
end_time: '17:00'
working_day_numbers:
- 1
- 2
- 3
- 4
- 5
created_at: ...
updated_at: ...
items:
type: object
properties:
id:
type: integer
example: 1
day_of_week:
type: integer
example: 0
day_name:
type: string
example: Sunday
is_working:
type: boolean
example: false
updated_at:
type: string
example: ...
shifts:
type: array
example: []
working_day_numbers:
type: array
example:
- 1
- 2
- 3
- 4
- 5
items:
type: integer
tags:
- 'Working Days (Public)'
security: []
/api/v1/admin-only/dashboard:
get:
summary: 'Admin Dashboard'
operationId: adminDashboard
description: 'Get admin dashboard data. This endpoint is protected and requires admin role.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Admin dashboard data'
data:
admin: true
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Admin dashboard data'
data:
type: object
properties:
admin:
type: boolean
example: true
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Forbidden - Admin access required'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Forbidden - Admin access required'
tags:
- 'Example Routes'
/api/v1/staff-only/dashboard:
get:
summary: 'Staff Dashboard'
operationId: staffDashboard
description: 'Get staff dashboard data. This endpoint is protected and requires staff role.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Staff dashboard data'
data:
staff: true
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Staff dashboard data'
data:
type: object
properties:
staff:
type: boolean
example: true
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Forbidden - Staff access required'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Forbidden - Staff access required'
tags:
- 'Example Routes'
/api/v1/coach-only/dashboard:
get:
summary: 'Coach Dashboard'
operationId: coachDashboard
description: 'Get coach dashboard data. This endpoint is protected and requires coach role.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Coach dashboard data'
data:
coach: true
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Coach dashboard data'
data:
type: object
properties:
coach:
type: boolean
example: true
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Forbidden - Coach access required'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Forbidden - Coach access required'
tags:
- 'Example Routes'
/api/v1/customer-only/dashboard:
get:
summary: 'Customer Dashboard'
operationId: customerDashboard
description: 'Get customer dashboard data. This endpoint is protected and requires customer role.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Customer dashboard data'
data:
customer: true
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Customer dashboard data'
data:
type: object
properties:
customer:
type: boolean
example: true
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Forbidden - Customer access required'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Forbidden - Customer access required'
tags:
- 'Example Routes'
'/api/v1/program/enrollments/{enrollmentId}/modules':
get:
summary: ''
operationId: getApiV1ProgramEnrollmentsEnrollmentIdModules
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Coach - Enrollment Module Access'
security: []
patch:
summary: ''
operationId: patchApiV1ProgramEnrollmentsEnrollmentIdModules
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Enrollment Module Access'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
modules:
type: array
description: 'Must have at least 1 items.'
example:
- []
items:
type: object
properties:
program_structure_id:
type: integer
description: ''
example: 16
is_locked:
type: boolean
description: ''
example: false
required:
- program_structure_id
- is_locked
required:
- modules
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/program/enrollments/{enrollmentId}/modules/{structureId}':
put:
summary: ''
operationId: putApiV1ProgramEnrollmentsEnrollmentIdModulesStructureId
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Enrollment Module Access'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
is_locked:
type: boolean
description: ''
example: false
required:
- is_locked
security: []
patch:
summary: ''
operationId: patchApiV1ProgramEnrollmentsEnrollmentIdModulesStructureId
description: ''
parameters: []
responses: { }
tags:
- 'Coach - Enrollment Module Access'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
is_locked:
type: boolean
description: ''
example: true
required:
- is_locked
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/customer/enrollments/{enrollmentId}/modules/{structureId}/card-game/state':
get:
summary: ''
operationId: getApiV1CustomerEnrollmentsEnrollmentIdModulesStructureIdCardGameState
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Customer - Enrollment Card Game'
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/customer/enrollments/{enrollmentId}/modules/{structureId}/card-game/question-sets/{setId}/questions':
get:
summary: ''
operationId: getApiV1CustomerEnrollmentsEnrollmentIdModulesStructureIdCardGameQuestionSetsSetIdQuestions
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Customer - Enrollment Card Game'
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: setId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/customer/enrollments/{enrollmentId}/modules/{structureId}/card-game/question-sets/{setId}/questions/{questionId}/answer':
put:
summary: ''
operationId: putApiV1CustomerEnrollmentsEnrollmentIdModulesStructureIdCardGameQuestionSetsSetIdQuestionsQuestionIdAnswer
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Enrollment Card Game'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
answer_text:
type: string
description: 'Must not be greater than 10000 characters.'
example: b
nullable: true
answer_option:
type: string
description: 'Must not be greater than 1000 characters.'
example: 'n'
nullable: true
answer_options:
type: array
description: 'Must not be greater than 1000 characters.'
example:
- g
items:
type: string
security: []
patch:
summary: ''
operationId: patchApiV1CustomerEnrollmentsEnrollmentIdModulesStructureIdCardGameQuestionSetsSetIdQuestionsQuestionIdAnswer
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Enrollment Card Game'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
answer_text:
type: string
description: 'Must not be greater than 10000 characters.'
example: b
nullable: true
answer_option:
type: string
description: 'Must not be greater than 1000 characters.'
example: 'n'
nullable: true
answer_options:
type: array
description: 'Must not be greater than 1000 characters.'
example:
- g
items:
type: string
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: setId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: questionId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/customer/enrollments/{enrollmentId}/modules/{structureId}/card-game/question-sets/{setId}/card-selection':
put:
summary: ''
operationId: putApiV1CustomerEnrollmentsEnrollmentIdModulesStructureIdCardGameQuestionSetsSetIdCardSelection
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Enrollment Card Game'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
card_snapshot_ids:
type: array
description: ''
example:
- 16
items:
type: integer
security: []
patch:
summary: ''
operationId: patchApiV1CustomerEnrollmentsEnrollmentIdModulesStructureIdCardGameQuestionSetsSetIdCardSelection
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Enrollment Card Game'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
card_snapshot_ids:
type: array
description: ''
example:
- 16
items:
type: integer
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: setId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/customer/enrollments/{enrollmentId}/modules/{structureId}/card-game/submit':
post:
summary: ''
operationId: postApiV1CustomerEnrollmentsEnrollmentIdModulesStructureIdCardGameSubmit
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Enrollment Card Game'
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/customer/enrollments/{enrollmentId}/modules/{structureId}/find-your-motivation/words':
get:
summary: ''
operationId: getApiV1CustomerEnrollmentsEnrollmentIdModulesStructureIdFindYourMotivationWords
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Customer - Enrollment Find Your Motivation'
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/customer/enrollments/{enrollmentId}/modules/{structureId}/find-your-motivation/words/{wordId}/guess':
put:
summary: ''
operationId: putApiV1CustomerEnrollmentsEnrollmentIdModulesStructureIdFindYourMotivationWordsWordIdGuess
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Enrollment Find Your Motivation'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
guess_word:
type: string
description: 'Must not be greater than 255 characters.'
example: b
required:
- guess_word
security: []
patch:
summary: ''
operationId: patchApiV1CustomerEnrollmentsEnrollmentIdModulesStructureIdFindYourMotivationWordsWordIdGuess
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Enrollment Find Your Motivation'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
guess_word:
type: string
description: 'Must not be greater than 255 characters.'
example: b
required:
- guess_word
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: wordId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/customer/enrollments/{enrollmentId}/modules/{structureId}/goal-settings/goals':
get:
summary: ''
operationId: getApiV1CustomerEnrollmentsEnrollmentIdModulesStructureIdGoalSettingsGoals
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Customer - Enrollment Goal Settings'
security: []
post:
summary: ''
operationId: postApiV1CustomerEnrollmentsEnrollmentIdModulesStructureIdGoalSettingsGoals
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Enrollment Goal Settings'
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/customer/enrollments/{enrollmentId}/modules/{structureId}/goal-settings/goals/{goalId}':
put:
summary: ''
operationId: putApiV1CustomerEnrollmentsEnrollmentIdModulesStructureIdGoalSettingsGoalsGoalId
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Enrollment Goal Settings'
security: []
patch:
summary: ''
operationId: patchApiV1CustomerEnrollmentsEnrollmentIdModulesStructureIdGoalSettingsGoalsGoalId
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Enrollment Goal Settings'
security: []
delete:
summary: ''
operationId: deleteApiV1CustomerEnrollmentsEnrollmentIdModulesStructureIdGoalSettingsGoalsGoalId
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Enrollment Goal Settings'
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: goalId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/customer/enrollments/{enrollmentId}/modules/{structureId}/goal-settings/goals/{goalId}/sub-goals':
post:
summary: ''
operationId: postApiV1CustomerEnrollmentsEnrollmentIdModulesStructureIdGoalSettingsGoalsGoalIdSubGoals
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Enrollment Goal Settings'
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: goalId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/customer/enrollments/{enrollmentId}/modules/{structureId}/goal-settings/goals/{goalId}/sub-goals/{subGoalId}':
put:
summary: ''
operationId: putApiV1CustomerEnrollmentsEnrollmentIdModulesStructureIdGoalSettingsGoalsGoalIdSubGoalsSubGoalId
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Enrollment Goal Settings'
security: []
patch:
summary: ''
operationId: patchApiV1CustomerEnrollmentsEnrollmentIdModulesStructureIdGoalSettingsGoalsGoalIdSubGoalsSubGoalId
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Enrollment Goal Settings'
security: []
delete:
summary: ''
operationId: deleteApiV1CustomerEnrollmentsEnrollmentIdModulesStructureIdGoalSettingsGoalsGoalIdSubGoalsSubGoalId
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Enrollment Goal Settings'
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: goalId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: subGoalId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/customer/enrollments/{enrollmentId}/modules/{structureId}/habit-tracker/state':
get:
summary: ''
operationId: getApiV1CustomerEnrollmentsEnrollmentIdModulesStructureIdHabitTrackerState
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Customer - Enrollment Habit Tracker'
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/customer/enrollments/{enrollmentId}/modules/{structureId}/habit-tracker/habits':
post:
summary: ''
operationId: postApiV1CustomerEnrollmentsEnrollmentIdModulesStructureIdHabitTrackerHabits
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Enrollment Habit Tracker'
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/customer/enrollments/{enrollmentId}/modules/{structureId}/habit-tracker/habits/{habitId}':
put:
summary: ''
operationId: putApiV1CustomerEnrollmentsEnrollmentIdModulesStructureIdHabitTrackerHabitsHabitId
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Enrollment Habit Tracker'
security: []
patch:
summary: ''
operationId: patchApiV1CustomerEnrollmentsEnrollmentIdModulesStructureIdHabitTrackerHabitsHabitId
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Enrollment Habit Tracker'
security: []
delete:
summary: ''
operationId: deleteApiV1CustomerEnrollmentsEnrollmentIdModulesStructureIdHabitTrackerHabitsHabitId
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Enrollment Habit Tracker'
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: habitId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/customer/enrollments/{enrollmentId}/modules':
get:
summary: ''
operationId: getApiV1CustomerEnrollmentsEnrollmentIdModules
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Customer - Enrollment Modules'
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/customer/enrollments/{enrollmentId}/modules/{structureId}':
get:
summary: ''
operationId: getApiV1CustomerEnrollmentsEnrollmentIdModulesStructureId
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Customer - Enrollment Modules'
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/customer/enrollments/{enrollmentId}/modules/{structureId}/values/questions':
get:
summary: ''
operationId: getApiV1CustomerEnrollmentsEnrollmentIdModulesStructureIdValuesQuestions
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Customer - Enrollment Questions'
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/customer/enrollments/{enrollmentId}/modules/{structureId}/values/questions/{questionId}/answer':
put:
summary: ''
operationId: putApiV1CustomerEnrollmentsEnrollmentIdModulesStructureIdValuesQuestionsQuestionIdAnswer
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Enrollment Questions'
security: []
patch:
summary: ''
operationId: patchApiV1CustomerEnrollmentsEnrollmentIdModulesStructureIdValuesQuestionsQuestionIdAnswer
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Enrollment Questions'
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: questionId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/customer/enrollments/{enrollmentId}/modules/{structureId}/who-am-i/questions':
get:
summary: ''
operationId: getApiV1CustomerEnrollmentsEnrollmentIdModulesStructureIdWhoAmIQuestions
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Customer - Enrollment Questions'
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/customer/enrollments/{enrollmentId}/modules/{structureId}/who-am-i/questions/{questionId}/answer':
put:
summary: ''
operationId: putApiV1CustomerEnrollmentsEnrollmentIdModulesStructureIdWhoAmIQuestionsQuestionIdAnswer
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Enrollment Questions'
security: []
patch:
summary: ''
operationId: patchApiV1CustomerEnrollmentsEnrollmentIdModulesStructureIdWhoAmIQuestionsQuestionIdAnswer
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Enrollment Questions'
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: questionId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/customer/enrollments/{enrollmentId}/resources/upload-documents':
get:
summary: ''
operationId: getApiV1CustomerEnrollmentsEnrollmentIdResourcesUploadDocuments
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Customer - Enrollment Upload Documents'
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/customer/enrollments/{enrollmentId}/modules/{structureId}/upload-documents/resources':
get:
summary: ''
operationId: getApiV1CustomerEnrollmentsEnrollmentIdModulesStructureIdUploadDocumentsResources
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Customer - Enrollment Upload Documents'
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/customer/enrollments/{enrollmentId}/modules/{structureId}/wheel-of-life/elements':
get:
summary: ''
operationId: getApiV1CustomerEnrollmentsEnrollmentIdModulesStructureIdWheelOfLifeElements
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Customer - Enrollment Wheel Of Life'
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/customer/enrollments/{enrollmentId}/modules/{structureId}/wheel-of-life/ratings':
put:
summary: ''
operationId: putApiV1CustomerEnrollmentsEnrollmentIdModulesStructureIdWheelOfLifeRatings
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Enrollment Wheel Of Life'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
ratings:
type: array
description: 'Must have at least 1 items.'
example:
- []
items:
type: object
properties:
element_id:
type: integer
description: ''
example: 16
nullable: true
id:
type: integer
description: ''
example: 16
nullable: true
source_element_id:
type: integer
description: ''
example: 16
nullable: true
rating:
type: integer
description: ''
example: 16
required:
- rating
required:
- ratings
security: []
patch:
summary: ''
operationId: patchApiV1CustomerEnrollmentsEnrollmentIdModulesStructureIdWheelOfLifeRatings
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Enrollment Wheel Of Life'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
ratings:
type: array
description: 'Must have at least 1 items.'
example:
- []
items:
type: object
properties:
element_id:
type: integer
description: ''
example: 16
nullable: true
id:
type: integer
description: ''
example: 16
nullable: true
source_element_id:
type: integer
description: ''
example: 16
nullable: true
rating:
type: integer
description: ''
example: 16
required:
- rating
required:
- ratings
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/customer/enrollments/{enrollmentId}/modules/{structureId}/wheel-of-life/elements/{elementId}/questions':
get:
summary: ''
operationId: getApiV1CustomerEnrollmentsEnrollmentIdModulesStructureIdWheelOfLifeElementsElementIdQuestions
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- 'Customer - Enrollment Wheel Of Life'
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: elementId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/customer/enrollments/{enrollmentId}/modules/{structureId}/wheel-of-life/elements/{elementId}/questions/{questionId}/answer':
put:
summary: ''
operationId: putApiV1CustomerEnrollmentsEnrollmentIdModulesStructureIdWheelOfLifeElementsElementIdQuestionsQuestionIdAnswer
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Enrollment Wheel Of Life'
security: []
patch:
summary: ''
operationId: patchApiV1CustomerEnrollmentsEnrollmentIdModulesStructureIdWheelOfLifeElementsElementIdQuestionsQuestionIdAnswer
description: ''
parameters: []
responses: { }
tags:
- 'Customer - Enrollment Wheel Of Life'
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: structureId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: elementId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: questionId
description: ''
example: architecto
required: true
schema:
type: string
/api/v1/program/sessions/calendar:
get:
summary: ''
operationId: getApiV1ProgramSessionsCalendar
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- Endpoints
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
from:
type: string
description: 'Must be a valid date in the format Y-m-d.'
example: '2026-04-25'
to:
type: string
description: 'Must be a valid date in the format Y-m-d. Must be a date after or equal to from.'
example: '2052-05-18'
timezone:
type: string
description: 'Must be a valid time zone, such as Africa/Accra.'
example: Asia/Ulaanbaatar
security: []
'/api/v1/program/enrollments/{enrollmentId}/sessions':
get:
summary: ''
operationId: getApiV1ProgramEnrollmentsEnrollmentIdSessions
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- Endpoints
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/program/enrollments/{enrollmentId}/sessions/{sessionId}':
get:
summary: ''
operationId: getApiV1ProgramEnrollmentsEnrollmentIdSessionsSessionId
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: Unauthenticated
properties:
success:
type: boolean
example: false
message:
type: string
example: Unauthenticated
tags:
- Endpoints
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: sessionId
description: ''
example: architecto
required: true
schema:
type: string
'/api/v1/program/enrollments/{enrollmentId}/sessions/{sessionId}/video-token':
post:
summary: ''
operationId: postApiV1ProgramEnrollmentsEnrollmentIdSessionsSessionIdVideoToken
description: ''
parameters: []
responses: { }
tags:
- Endpoints
security: []
parameters:
-
in: path
name: enrollmentId
description: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: sessionId
description: ''
example: architecto
required: true
schema:
type: string