openapi: 3.0.3
info:
title: 'Laravel API Documentation'
description: ''
version: 1.0.0
servers:
-
url: 'https://finweb-api.on-forge.com'
tags:
-
name: 'Broker Sync'
description: ''
-
name: Endpoints
description: ''
-
name: 'Zoho CRM'
description: ''
paths:
/api/admin/brokers/sync:
post:
summary: 'Manually sync brokers from Zoho CRM.'
operationId: manuallySyncBrokersFromZohoCRM
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
message: 'Zoho broker sync completed.'
summary:
total: 10
created: 2
updated: 8
skipped: 0
failed: 0
properties:
data:
type: object
properties:
message:
type: string
example: 'Zoho broker sync completed.'
summary:
type: object
properties:
total:
type: integer
example: 10
created:
type: integer
example: 2
updated:
type: integer
example: 8
skipped:
type: integer
example: 0
failed:
type: integer
example: 0
tags:
- 'Broker Sync'
/api/admin/brokers/sync-status:
get:
summary: 'Get latest broker sync status.'
operationId: getLatestBrokerSyncStatus
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
id: 1
broker_id: null
action: zoho.sync
status: success
source_system: zoho
message: 'Zoho broker sync completed.'
created_at: '2026-04-09T10:12:30Z'
properties:
data:
type: object
properties:
id:
type: integer
example: 1
broker_id:
type: string
example: null
nullable: true
action:
type: string
example: zoho.sync
status:
type: string
example: success
source_system:
type: string
example: zoho
message:
type: string
example: 'Zoho broker sync completed.'
created_at:
type: string
example: '2026-04-09T10:12:30Z'
tags:
- 'Broker Sync'
/api/admin/brokers/sync-logs:
get:
summary: 'Get Zoho sync logs.'
operationId: getZohoSyncLogs
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
-
id: 1
broker_id: null
action: zoho.sync
status: success
source_system: zoho
message: 'Zoho broker sync completed.'
created_at: '2026-04-09T10:12:30Z'
properties:
data:
type: array
example:
-
id: 1
broker_id: null
action: zoho.sync
status: success
source_system: zoho
message: 'Zoho broker sync completed.'
created_at: '2026-04-09T10:12:30Z'
items:
type: object
properties:
id:
type: integer
example: 1
broker_id:
type: string
example: null
nullable: true
action:
type: string
example: zoho.sync
status:
type: string
example: success
source_system:
type: string
example: zoho
message:
type: string
example: 'Zoho broker sync completed.'
created_at:
type: string
example: '2026-04-09T10:12:30Z'
tags:
- 'Broker Sync'
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 1000.'
example: 1
nullable: true
'/api/admin/brokers/{broker_id}/logs':
get:
summary: 'Get broker logs.'
operationId: getBrokerLogs
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
-
id: 1
broker_id: 5
action: zoho.sync.record
status: success
source_system: zoho
message: 'Zoho broker record updated.'
created_at: '2026-04-09T10:12:30Z'
properties:
data:
type: array
example:
-
id: 1
broker_id: 5
action: zoho.sync.record
status: success
source_system: zoho
message: 'Zoho broker record updated.'
created_at: '2026-04-09T10:12:30Z'
items:
type: object
properties:
id:
type: integer
example: 1
broker_id:
type: integer
example: 5
action:
type: string
example: zoho.sync.record
status:
type: string
example: success
source_system:
type: string
example: zoho
message:
type: string
example: 'Zoho broker record updated.'
created_at:
type: string
example: '2026-04-09T10:12:30Z'
tags:
- 'Broker Sync'
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 1000.'
example: 1
nullable: true
parameters:
-
in: path
name: broker_id
description: 'The ID of the broker.'
example: 16
required: true
schema:
type: integer
/api/login:
post:
summary: ''
operationId: postApiLogin
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
email:
type: string
description: 'Must be a valid email address.'
example: gbailey@example.net
password:
type: string
description: ''
example: '|]|{+-'
remember:
type: boolean
description: ''
example: true
required:
- email
- password
security: []
/api/portal-onboarding/validate:
get:
summary: ''
operationId: getApiPortalOnboardingValidate
description: ''
parameters: []
responses:
422:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'This onboarding link is invalid.'
code: invalid_token
properties:
message:
type: string
example: 'This onboarding link is invalid.'
code:
type: string
example: invalid_token
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
token:
type: string
description: 'Must be at least 32 characters.'
example: bngzmiyvdljnikhwaykcmyuwpwlvqwrsitcpscqldzsnrwtujwvlxjklqppwqbewtnn
required:
- token
security: []
/api/portal-onboarding/set-password:
post:
summary: ''
operationId: postApiPortalOnboardingSetPassword
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
token:
type: string
description: 'Must be at least 32 characters.'
example: bngzmiyvdljnikhwaykcmyuwpwlvqwrsitcpscqldzsnrwtujwvlxjklqppwqbewtnn
password:
type: string
description: 'Must be at least 8 characters.'
example: 'Ou.*,JH'
required:
- token
- password
security: []
/api/brokers:
get:
summary: ''
operationId: getApiBrokers
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data: []
properties:
data:
type: array
example: []
tags:
- Endpoints
security: []
'/api/brokers/{slug}':
get:
summary: ''
operationId: getApiBrokersSlug
description: ''
parameters: []
responses:
404:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Broker not found.'
properties:
message:
type: string
example: 'Broker not found.'
tags:
- Endpoints
security: []
parameters:
-
in: path
name: slug
description: 'The slug of the broker.'
example: 16
required: true
schema:
type: integer
/api/insights:
get:
summary: ''
operationId: getApiInsights
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data: []
properties:
data:
type: array
example: []
tags:
- Endpoints
security: []
'/api/insights/{slug}':
get:
summary: ''
operationId: getApiInsightsSlug
description: ''
parameters: []
responses:
404:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Insight not found.'
properties:
message:
type: string
example: 'Insight not found.'
tags:
- Endpoints
security: []
parameters:
-
in: path
name: slug
description: 'The slug of the insight.'
example: 16
required: true
schema:
type: integer
/api/testimonials:
get:
summary: ''
operationId: getApiTestimonials
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data: []
properties:
data:
type: array
example: []
tags:
- Endpoints
security: []
/api/join-us:
post:
summary: ''
operationId: postApiJoinUs
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
first_name:
type: string
description: 'Must not be greater than 255 characters.'
example: b
last_name:
type: string
description: 'Must not be greater than 255 characters.'
example: 'n'
email:
type: string
description: 'Must be a valid email address. Must not be greater than 255 characters.'
example: ashly64@example.com
mobile:
type: string
description: 'Must not be greater than 50 characters.'
example: v
nullable: true
state:
type: string
description: 'Must not be greater than 50 characters.'
example: d
nullable: true
enquiry_type:
type: string
description: 'Must not be greater than 120 characters.'
example: l
message:
type: string
description: ''
example: architecto
nullable: true
source:
type: string
description: 'Must not be greater than 100 characters.'
example: 'n'
nullable: true
required:
- first_name
- last_name
- email
- enquiry_type
security: []
/api/get-in-touch:
post:
summary: ''
operationId: postApiGetInTouch
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Must not be greater than 255 characters.'
example: b
email:
type: string
description: 'Must be a valid email address. Must not be greater than 255 characters.'
example: zbailey@example.net
message:
type: string
description: ''
example: architecto
nullable: true
source:
type: string
description: 'Must not be greater than 100 characters.'
example: 'n'
nullable: true
required:
- name
- email
security: []
/api/get-in-touch/content:
get:
summary: ''
operationId: getApiGetInTouchContent
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
badge_label: Contact
title: 'Get in touch'
phone_label: Phone
phone_value: '0424 191 095'
email_label: Email
email_value: bdm@finweb.com.au
location_label: Location
location_value: '9C Whitfield Bvd, Cranbourne West VIC 3977'
properties:
data:
type: object
properties:
badge_label:
type: string
example: Contact
title:
type: string
example: 'Get in touch'
phone_label:
type: string
example: Phone
phone_value:
type: string
example: '0424 191 095'
email_label:
type: string
example: Email
email_value:
type: string
example: bdm@finweb.com.au
location_label:
type: string
example: Location
location_value:
type: string
example: '9C Whitfield Bvd, Cranbourne West VIC 3977'
tags:
- Endpoints
security: []
/api/me:
get:
summary: ''
operationId: getApiMe
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Endpoints
security: []
put:
summary: ''
operationId: putApiMe
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Must not be greater than 255 characters.'
example: b
email:
type: string
description: 'Must be a valid email address. Must not be greater than 255 characters.'
example: zbailey@example.net
required:
- name
- email
security: []
/api/me/avatar:
post:
summary: ''
operationId: postApiMeAvatar
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: false
content:
multipart/form-data:
schema:
type: object
properties:
avatar:
type: string
format: binary
description: 'This field is required when avatars is not present. Must be a file. Must be an image. Must not be greater than 4096 kilobytes.'
avatars:
type: array
description: 'Must be a file. Must be an image. Must not be greater than 4096 kilobytes.'
items:
type: string
format: binary
security: []
delete:
summary: ''
operationId: deleteApiMeAvatar
description: ''
parameters: []
responses: { }
tags:
- Endpoints
security: []
/api/logout:
post:
summary: ''
operationId: postApiLogout
description: ''
parameters: []
responses: { }
tags:
- Endpoints
security: []
/api/auth/password:
put:
summary: ''
operationId: putApiAuthPassword
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
current_password:
type: string
description: ''
example: architecto
password:
type: string
description: 'Must be at least 8 characters.'
example: ']|{+-0pBNvYg'
required:
- current_password
- password
security: []
/api/dashboard/metrics:
get:
summary: ''
operationId: getApiDashboardMetrics
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Endpoints
security: []
/api/admin/brokers:
get:
summary: ''
operationId: getApiAdminBrokers
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Endpoints
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
search:
type: string
description: 'Must not be greater than 255 characters.'
example: b
nullable: true
status:
type: string
description: ''
example: pending
enum:
- active
- pending
- inactive
nullable: true
active:
type: boolean
description: ''
example: false
nullable: true
approved:
type: boolean
description: ''
example: true
nullable: true
per_page:
type: integer
description: 'Must be at least 1. Must not be greater than 1000.'
example: 22
nullable: true
page:
type: integer
description: 'Must be at least 1.'
example: 67
nullable: true
sort:
type: string
description: 'Must match the regex /^-?(name|email|company_name|license_no|active|approved|created_at|updated_at|slug)$/. Must not be greater than 255 characters.'
example: z
nullable: true
security: []
post:
summary: ''
operationId: postApiAdminBrokers
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Must not be greater than 255 characters.'
example: b
email:
type: string
description: 'Must be a valid email address. Must not be greater than 255 characters.'
example: zbailey@example.net
password:
type: string
description: 'Must be at least 8 characters.'
example: '-0pBNvYgxw'
slug:
type: string
description: 'Must not be greater than 255 characters.'
example: a
nullable: true
summary:
type: string
description: ''
example: architecto
nullable: true
profile_url:
type: string
description: 'Must not be greater than 2048 characters.'
example: 'http://bailey.com/'
nullable: true
featured_image:
type: string
description: 'Must not be greater than 2048 characters.'
example: m
nullable: true
avatar:
type: string
description: 'Must not be greater than 2048 characters.'
example: i
nullable: true
company_name:
type: string
description: 'Must not be greater than 255 characters.'
example: 'y'
phone:
type: string
description: 'Must not be greater than 50 characters.'
example: v
nullable: true
license_no:
type: string
description: 'Must not be greater than 255 characters.'
example: d
nullable: true
active:
type: boolean
description: ''
example: true
profile_content:
type: object
description: ''
example: null
properties:
intro:
type: object
description: ''
example: null
properties:
headline:
type: string
description: 'Must not be greater than 255 characters.'
example: l
nullable: true
paragraphs:
type: array
description: ''
example:
- architecto
items:
type: string
nullable: true
ctaLabel:
type: string
description: 'Must not be greater than 255 characters.'
example: 'n'
nullable: true
nullable: true
sections:
type: array
description: ''
example: null
items:
type: object
nullable: true
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: r
nullable: true
description:
type: string
description: ''
example: 'Eius et animi quos velit et.'
nullable: true
highlights:
type: array
description: 'Must not be greater than 255 characters.'
example:
- v
items:
type: string
nullable: true
accordion:
type: array
description: ''
example: null
items:
type: object
nullable: true
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: d
nullable: true
body:
type: string
description: ''
example: architecto
nullable: true
embed:
type: object
description: ''
example: null
properties:
iframeUrl:
type: string
description: 'This field is required when profile_content.sections.*.accordion.*.embed is present. Must be a valid URL. Must not be greater than 2048 characters.'
example: 'http://bailey.com/'
height:
type: integer
description: 'Must be at least 100. Must not be greater than 2000.'
example: 17
nullable: true
allow:
type: string
description: 'Must not be greater than 255 characters.'
example: i
nullable: true
scrolling:
type: string
description: ''
example: 'no'
enum: ['yes', 'no', auto]
nullable: true
nullable: true
homeLoans:
type: object
description: ''
example: null
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: g
nullable: true
description:
type: string
description: ''
example: 'Eius et animi quos velit et.'
nullable: true
highlights:
type: array
description: 'Must not be greater than 255 characters.'
example:
- v
items:
type: string
nullable: true
accordion:
type: array
description: ''
example: null
items:
type: object
nullable: true
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: 'y'
nullable: true
body:
type: string
description: ''
example: architecto
nullable: true
embed:
type: object
description: ''
example: null
properties:
iframeUrl:
type: string
description: 'This field is required when profile_content.homeLoans.accordion.*.embed is present. Must be a valid URL. Must not be greater than 2048 characters.'
example: 'http://bailey.com/'
height:
type: integer
description: 'Must be at least 100. Must not be greater than 2000.'
example: 17
nullable: true
allow:
type: string
description: 'Must not be greater than 255 characters.'
example: i
nullable: true
scrolling:
type: string
description: ''
example: 'no'
enum:
- 'yes'
- 'no'
- auto
nullable: true
nullable: true
nullable: true
commercialLoans:
type: object
description: ''
example: null
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: d
nullable: true
description:
type: string
description: ''
example: 'Eius et animi quos velit et.'
nullable: true
highlights:
type: array
description: 'Must not be greater than 255 characters.'
example:
- v
items:
type: string
nullable: true
accordion:
type: array
description: ''
example: null
items:
type: object
nullable: true
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: 'y'
nullable: true
body:
type: string
description: ''
example: architecto
nullable: true
embed:
type: object
description: ''
example: null
properties:
iframeUrl:
type: string
description: 'This field is required when profile_content.commercialLoans.accordion.*.embed is present. Must be a valid URL. Must not be greater than 2048 characters.'
example: 'http://bailey.com/'
height:
type: integer
description: 'Must be at least 100. Must not be greater than 2000.'
example: 17
nullable: true
allow:
type: string
description: 'Must not be greater than 255 characters.'
example: i
nullable: true
scrolling:
type: string
description: ''
example: 'yes'
enum:
- 'yes'
- 'no'
- auto
nullable: true
nullable: true
nullable: true
otherLoans:
type: object
description: ''
example: null
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: d
nullable: true
description:
type: string
description: ''
example: 'Eius et animi quos velit et.'
nullable: true
highlights:
type: array
description: 'Must not be greater than 255 characters.'
example:
- v
items:
type: string
nullable: true
accordion:
type: array
description: ''
example: null
items:
type: object
nullable: true
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: 'y'
nullable: true
body:
type: string
description: ''
example: architecto
nullable: true
embed:
type: object
description: ''
example: null
properties:
iframeUrl:
type: string
description: 'This field is required when profile_content.otherLoans.accordion.*.embed is present. Must be a valid URL. Must not be greater than 2048 characters.'
example: 'http://bailey.com/'
height:
type: integer
description: 'Must be at least 100. Must not be greater than 2000.'
example: 17
nullable: true
allow:
type: string
description: 'Must not be greater than 255 characters.'
example: i
nullable: true
scrolling:
type: string
description: ''
example: 'yes'
enum:
- 'yes'
- 'no'
- auto
nullable: true
nullable: true
nullable: true
contact:
type: object
description: ''
example: null
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: d
nullable: true
formEmbedUrl:
type: string
description: 'Must be a valid URL. Must not be greater than 2048 characters.'
example: 'https://gaylord.com/modi-deserunt-aut-ab-provident-perspiciatis.html'
nullable: true
mapEmbedUrl:
type: string
description: 'Must not be greater than 2048 characters.'
example: 'http://www.cruickshank.com/adipisci-quidem-nostrum-qui-commodi-incidunt-iure'
nullable: true
nullable: true
nullable: true
required:
- name
- email
- password
- company_name
security: []
'/api/admin/brokers/{broker_id}':
get:
summary: ''
operationId: getApiAdminBrokersBroker_id
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Endpoints
security: []
put:
summary: ''
operationId: putApiAdminBrokersBroker_id
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
summary:
type: string
description: ''
example: architecto
nullable: true
profile_url:
type: string
description: 'Must not be greater than 2048 characters.'
example: 'http://bailey.com/'
nullable: true
featured_image:
type: string
description: 'Must not be greater than 2048 characters.'
example: m
nullable: true
avatar:
type: string
description: 'Must not be greater than 2048 characters.'
example: i
nullable: true
profile_content:
type: object
description: ''
example: null
properties:
intro:
type: object
description: ''
example: null
properties:
headline:
type: string
description: 'Must not be greater than 255 characters.'
example: 'y'
nullable: true
paragraphs:
type: array
description: ''
example:
- architecto
items:
type: string
nullable: true
ctaLabel:
type: string
description: 'Must not be greater than 255 characters.'
example: 'n'
nullable: true
nullable: true
sections:
type: array
description: ''
example: null
items:
type: object
nullable: true
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: r
nullable: true
description:
type: string
description: ''
example: 'Eius et animi quos velit et.'
nullable: true
highlights:
type: array
description: 'Must not be greater than 255 characters.'
example:
- v
items:
type: string
nullable: true
accordion:
type: array
description: ''
example: null
items:
type: object
nullable: true
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: d
nullable: true
body:
type: string
description: ''
example: architecto
nullable: true
embed:
type: object
description: ''
example: null
properties:
iframeUrl:
type: string
description: 'This field is required when profile_content.sections.*.accordion.*.embed is present. Must be a valid URL. Must not be greater than 2048 characters.'
example: 'http://bailey.com/'
height:
type: integer
description: 'Must be at least 100. Must not be greater than 2000.'
example: 17
nullable: true
allow:
type: string
description: 'Must not be greater than 255 characters.'
example: i
nullable: true
scrolling:
type: string
description: ''
example: auto
enum: ['yes', 'no', auto]
nullable: true
nullable: true
homeLoans:
type: object
description: ''
example: null
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: g
nullable: true
description:
type: string
description: ''
example: 'Eius et animi quos velit et.'
nullable: true
highlights:
type: array
description: 'Must not be greater than 255 characters.'
example:
- v
items:
type: string
nullable: true
accordion:
type: array
description: ''
example: null
items:
type: object
nullable: true
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: 'y'
nullable: true
body:
type: string
description: ''
example: architecto
nullable: true
embed:
type: object
description: ''
example: null
properties:
iframeUrl:
type: string
description: 'This field is required when profile_content.homeLoans.accordion.*.embed is present. Must be a valid URL. Must not be greater than 2048 characters.'
example: 'http://bailey.com/'
height:
type: integer
description: 'Must be at least 100. Must not be greater than 2000.'
example: 17
nullable: true
allow:
type: string
description: 'Must not be greater than 255 characters.'
example: i
nullable: true
scrolling:
type: string
description: ''
example: auto
enum:
- 'yes'
- 'no'
- auto
nullable: true
nullable: true
nullable: true
commercialLoans:
type: object
description: ''
example: null
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: d
nullable: true
description:
type: string
description: ''
example: 'Eius et animi quos velit et.'
nullable: true
highlights:
type: array
description: 'Must not be greater than 255 characters.'
example:
- v
items:
type: string
nullable: true
accordion:
type: array
description: ''
example: null
items:
type: object
nullable: true
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: 'y'
nullable: true
body:
type: string
description: ''
example: architecto
nullable: true
embed:
type: object
description: ''
example: null
properties:
iframeUrl:
type: string
description: 'This field is required when profile_content.commercialLoans.accordion.*.embed is present. Must be a valid URL. Must not be greater than 2048 characters.'
example: 'http://bailey.com/'
height:
type: integer
description: 'Must be at least 100. Must not be greater than 2000.'
example: 17
nullable: true
allow:
type: string
description: 'Must not be greater than 255 characters.'
example: i
nullable: true
scrolling:
type: string
description: ''
example: 'no'
enum:
- 'yes'
- 'no'
- auto
nullable: true
nullable: true
nullable: true
otherLoans:
type: object
description: ''
example: null
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: d
nullable: true
description:
type: string
description: ''
example: 'Eius et animi quos velit et.'
nullable: true
highlights:
type: array
description: 'Must not be greater than 255 characters.'
example:
- v
items:
type: string
nullable: true
accordion:
type: array
description: ''
example: null
items:
type: object
nullable: true
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: 'y'
nullable: true
body:
type: string
description: ''
example: architecto
nullable: true
embed:
type: object
description: ''
example: null
properties:
iframeUrl:
type: string
description: 'This field is required when profile_content.otherLoans.accordion.*.embed is present. Must be a valid URL. Must not be greater than 2048 characters.'
example: 'http://bailey.com/'
height:
type: integer
description: 'Must be at least 100. Must not be greater than 2000.'
example: 17
nullable: true
allow:
type: string
description: 'Must not be greater than 255 characters.'
example: i
nullable: true
scrolling:
type: string
description: ''
example: auto
enum:
- 'yes'
- 'no'
- auto
nullable: true
nullable: true
nullable: true
contact:
type: object
description: ''
example: null
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: d
nullable: true
formEmbedUrl:
type: string
description: 'Must be a valid URL. Must not be greater than 2048 characters.'
example: 'https://gaylord.com/modi-deserunt-aut-ab-provident-perspiciatis.html'
nullable: true
mapEmbedUrl:
type: string
description: 'Must not be greater than 2048 characters.'
example: 'http://www.cruickshank.com/adipisci-quidem-nostrum-qui-commodi-incidunt-iure'
nullable: true
nullable: true
nullable: true
security: []
patch:
summary: ''
operationId: patchApiAdminBrokersBroker_id
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
summary:
type: string
description: ''
example: architecto
nullable: true
profile_url:
type: string
description: 'Must not be greater than 2048 characters.'
example: 'http://bailey.com/'
nullable: true
featured_image:
type: string
description: 'Must not be greater than 2048 characters.'
example: m
nullable: true
avatar:
type: string
description: 'Must not be greater than 2048 characters.'
example: i
nullable: true
profile_content:
type: object
description: ''
example: null
properties:
intro:
type: object
description: ''
example: null
properties:
headline:
type: string
description: 'Must not be greater than 255 characters.'
example: 'y'
nullable: true
paragraphs:
type: array
description: ''
example:
- architecto
items:
type: string
nullable: true
ctaLabel:
type: string
description: 'Must not be greater than 255 characters.'
example: 'n'
nullable: true
nullable: true
sections:
type: array
description: ''
example: null
items:
type: object
nullable: true
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: r
nullable: true
description:
type: string
description: ''
example: 'Eius et animi quos velit et.'
nullable: true
highlights:
type: array
description: 'Must not be greater than 255 characters.'
example:
- v
items:
type: string
nullable: true
accordion:
type: array
description: ''
example: null
items:
type: object
nullable: true
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: d
nullable: true
body:
type: string
description: ''
example: architecto
nullable: true
embed:
type: object
description: ''
example: null
properties:
iframeUrl:
type: string
description: 'This field is required when profile_content.sections.*.accordion.*.embed is present. Must be a valid URL. Must not be greater than 2048 characters.'
example: 'http://bailey.com/'
height:
type: integer
description: 'Must be at least 100. Must not be greater than 2000.'
example: 17
nullable: true
allow:
type: string
description: 'Must not be greater than 255 characters.'
example: i
nullable: true
scrolling:
type: string
description: ''
example: 'no'
enum: ['yes', 'no', auto]
nullable: true
nullable: true
homeLoans:
type: object
description: ''
example: null
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: g
nullable: true
description:
type: string
description: ''
example: 'Eius et animi quos velit et.'
nullable: true
highlights:
type: array
description: 'Must not be greater than 255 characters.'
example:
- v
items:
type: string
nullable: true
accordion:
type: array
description: ''
example: null
items:
type: object
nullable: true
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: 'y'
nullable: true
body:
type: string
description: ''
example: architecto
nullable: true
embed:
type: object
description: ''
example: null
properties:
iframeUrl:
type: string
description: 'This field is required when profile_content.homeLoans.accordion.*.embed is present. Must be a valid URL. Must not be greater than 2048 characters.'
example: 'http://bailey.com/'
height:
type: integer
description: 'Must be at least 100. Must not be greater than 2000.'
example: 17
nullable: true
allow:
type: string
description: 'Must not be greater than 255 characters.'
example: i
nullable: true
scrolling:
type: string
description: ''
example: 'no'
enum:
- 'yes'
- 'no'
- auto
nullable: true
nullable: true
nullable: true
commercialLoans:
type: object
description: ''
example: null
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: d
nullable: true
description:
type: string
description: ''
example: 'Eius et animi quos velit et.'
nullable: true
highlights:
type: array
description: 'Must not be greater than 255 characters.'
example:
- v
items:
type: string
nullable: true
accordion:
type: array
description: ''
example: null
items:
type: object
nullable: true
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: 'y'
nullable: true
body:
type: string
description: ''
example: architecto
nullable: true
embed:
type: object
description: ''
example: null
properties:
iframeUrl:
type: string
description: 'This field is required when profile_content.commercialLoans.accordion.*.embed is present. Must be a valid URL. Must not be greater than 2048 characters.'
example: 'http://bailey.com/'
height:
type: integer
description: 'Must be at least 100. Must not be greater than 2000.'
example: 17
nullable: true
allow:
type: string
description: 'Must not be greater than 255 characters.'
example: i
nullable: true
scrolling:
type: string
description: ''
example: 'no'
enum:
- 'yes'
- 'no'
- auto
nullable: true
nullable: true
nullable: true
otherLoans:
type: object
description: ''
example: null
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: d
nullable: true
description:
type: string
description: ''
example: 'Eius et animi quos velit et.'
nullable: true
highlights:
type: array
description: 'Must not be greater than 255 characters.'
example:
- v
items:
type: string
nullable: true
accordion:
type: array
description: ''
example: null
items:
type: object
nullable: true
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: 'y'
nullable: true
body:
type: string
description: ''
example: architecto
nullable: true
embed:
type: object
description: ''
example: null
properties:
iframeUrl:
type: string
description: 'This field is required when profile_content.otherLoans.accordion.*.embed is present. Must be a valid URL. Must not be greater than 2048 characters.'
example: 'http://bailey.com/'
height:
type: integer
description: 'Must be at least 100. Must not be greater than 2000.'
example: 17
nullable: true
allow:
type: string
description: 'Must not be greater than 255 characters.'
example: i
nullable: true
scrolling:
type: string
description: ''
example: auto
enum:
- 'yes'
- 'no'
- auto
nullable: true
nullable: true
nullable: true
contact:
type: object
description: ''
example: null
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: d
nullable: true
formEmbedUrl:
type: string
description: 'Must be a valid URL. Must not be greater than 2048 characters.'
example: 'https://gaylord.com/modi-deserunt-aut-ab-provident-perspiciatis.html'
nullable: true
mapEmbedUrl:
type: string
description: 'Must not be greater than 2048 characters.'
example: 'http://www.cruickshank.com/adipisci-quidem-nostrum-qui-commodi-incidunt-iure'
nullable: true
nullable: true
nullable: true
security: []
delete:
summary: ''
operationId: deleteApiAdminBrokersBroker_id
description: ''
parameters: []
responses: { }
tags:
- Endpoints
security: []
parameters:
-
in: path
name: broker_id
description: 'The ID of the broker.'
example: 16
required: true
schema:
type: integer
'/api/admin/brokers/{broker_id}/send-portal-invite':
post:
summary: ''
operationId: postApiAdminBrokersBroker_idSendPortalInvite
description: ''
parameters: []
responses: { }
tags:
- Endpoints
security: []
parameters:
-
in: path
name: broker_id
description: 'The ID of the broker.'
example: 16
required: true
schema:
type: integer
'/api/admin/brokers/{broker_id}/images':
post:
summary: ''
operationId: postApiAdminBrokersBroker_idImages
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: false
content:
multipart/form-data:
schema:
type: object
properties:
featured_image:
type: string
format: binary
description: 'Must be a file. Must be an image. Must not be greater than 2048 kilobytes.'
featured_images:
type: array
description: 'Must be a file. Must be an image. Must not be greater than 2048 kilobytes.'
items:
type: string
format: binary
avatar:
type: string
format: binary
description: 'Must be a file. Must be an image. Must not be greater than 4096 kilobytes.'
avatars:
type: array
description: 'Must be a file. Must be an image. Must not be greater than 4096 kilobytes.'
items:
type: string
format: binary
security: []
parameters:
-
in: path
name: broker_id
description: 'The ID of the broker.'
example: 16
required: true
schema:
type: integer
'/api/admin/brokers/{broker_id}/audits':
get:
summary: ''
operationId: getApiAdminBrokersBroker_idAudits
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Endpoints
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 1000.'
example: 1
nullable: true
security: []
parameters:
-
in: path
name: broker_id
description: 'The ID of the broker.'
example: 16
required: true
schema:
type: integer
/api/admin/insights:
get:
summary: ''
operationId: getApiAdminInsights
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Endpoints
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
search:
type: string
description: 'Must not be greater than 255 characters.'
example: b
is_published:
type: boolean
description: ''
example: true
sort:
type: string
description: 'Must not be greater than 255 characters.'
example: 'n'
per_page:
type: integer
description: 'Must be at least 1. Must not be greater than 1000.'
example: 7
security: []
post:
summary: ''
operationId: postApiAdminInsights
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: b
slug:
type: string
description: 'Must not be greater than 255 characters.'
example: 'n'
published_at:
type: string
description: 'Must be a valid date.'
example: '2026-04-20T12:46:34'
excerpt:
type: string
description: ''
example: architecto
nullable: true
body:
type: string
description: ''
example: architecto
nullable: true
image_url:
type: string
description: 'Must not be greater than 2048 characters.'
example: 'http://bailey.com/'
nullable: true
button_text:
type: string
description: 'Must not be greater than 255 characters.'
example: m
nullable: true
button_url:
type: string
description: 'Must not be greater than 2048 characters.'
example: 'https://www.gulgowski.com/nihil-accusantium-harum-mollitia-modi-deserunt'
nullable: true
link_type:
type: string
description: ''
example: external
enum:
- internal
- external
is_published:
type: boolean
description: ''
example: false
required:
- title
- slug
- published_at
- link_type
security: []
'/api/admin/insights/{insight_id}':
get:
summary: ''
operationId: getApiAdminInsightsInsight_id
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Endpoints
security: []
put:
summary: ''
operationId: putApiAdminInsightsInsight_id
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: b
slug:
type: string
description: 'Must not be greater than 255 characters.'
example: 'n'
published_at:
type: string
description: 'Must be a valid date.'
example: '2026-04-20T12:46:34'
excerpt:
type: string
description: ''
example: architecto
nullable: true
body:
type: string
description: ''
example: architecto
nullable: true
image_url:
type: string
description: 'Must not be greater than 2048 characters.'
example: 'http://bailey.com/'
nullable: true
button_text:
type: string
description: 'Must not be greater than 255 characters.'
example: m
nullable: true
button_url:
type: string
description: 'Must not be greater than 2048 characters.'
example: 'https://www.gulgowski.com/nihil-accusantium-harum-mollitia-modi-deserunt'
nullable: true
link_type:
type: string
description: ''
example: internal
enum:
- internal
- external
is_published:
type: boolean
description: ''
example: false
security: []
patch:
summary: ''
operationId: patchApiAdminInsightsInsight_id
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: b
slug:
type: string
description: 'Must not be greater than 255 characters.'
example: 'n'
published_at:
type: string
description: 'Must be a valid date.'
example: '2026-04-20T12:46:34'
excerpt:
type: string
description: ''
example: architecto
nullable: true
body:
type: string
description: ''
example: architecto
nullable: true
image_url:
type: string
description: 'Must not be greater than 2048 characters.'
example: 'http://bailey.com/'
nullable: true
button_text:
type: string
description: 'Must not be greater than 255 characters.'
example: m
nullable: true
button_url:
type: string
description: 'Must not be greater than 2048 characters.'
example: 'https://www.gulgowski.com/nihil-accusantium-harum-mollitia-modi-deserunt'
nullable: true
link_type:
type: string
description: ''
example: internal
enum:
- internal
- external
is_published:
type: boolean
description: ''
example: false
security: []
delete:
summary: ''
operationId: deleteApiAdminInsightsInsight_id
description: ''
parameters: []
responses: { }
tags:
- Endpoints
security: []
parameters:
-
in: path
name: insight_id
description: 'The ID of the insight.'
example: 16
required: true
schema:
type: integer
/api/admin/insights/upload:
post:
summary: ''
operationId: postApiAdminInsightsUpload
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: false
content:
multipart/form-data:
schema:
type: object
properties:
image:
type: string
format: binary
description: 'This field is required when images is not present. Must be a file. Must be an image. Must not be greater than 2048 kilobytes.'
images:
type: array
description: 'Must be a file. Must be an image. Must not be greater than 2048 kilobytes.'
items:
type: string
format: binary
security: []
/api/admin/testimonials:
get:
summary: ''
operationId: getApiAdminTestimonials
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Endpoints
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
search:
type: string
description: 'Must not be greater than 255 characters.'
example: b
is_active:
type: boolean
description: ''
example: true
sort:
type: string
description: 'Must not be greater than 255 characters.'
example: 'n'
per_page:
type: integer
description: 'Must be at least 1. Must not be greater than 1000.'
example: 7
security: []
post:
summary: ''
operationId: postApiAdminTestimonials
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Must not be greater than 255 characters.'
example: b
role:
type: string
description: 'Must not be greater than 255 characters.'
example: 'n'
quote:
type: string
description: ''
example: architecto
rating:
type: integer
description: 'Must be at least 1. Must not be greater than 5.'
example: 2
sort_order:
type: integer
description: 'Must be at least 0. Must not be greater than 100000.'
example: 7
nullable: true
is_active:
type: boolean
description: ''
example: true
required:
- name
- role
- quote
- rating
security: []
'/api/admin/testimonials/{testimonial_id}':
get:
summary: ''
operationId: getApiAdminTestimonialsTestimonial_id
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Endpoints
security: []
put:
summary: ''
operationId: putApiAdminTestimonialsTestimonial_id
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Must not be greater than 255 characters.'
example: b
role:
type: string
description: 'Must not be greater than 255 characters.'
example: 'n'
quote:
type: string
description: ''
example: architecto
rating:
type: integer
description: 'Must be at least 1. Must not be greater than 5.'
example: 2
sort_order:
type: integer
description: 'Must be at least 0. Must not be greater than 100000.'
example: 7
nullable: true
is_active:
type: boolean
description: ''
example: true
security: []
patch:
summary: ''
operationId: patchApiAdminTestimonialsTestimonial_id
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Must not be greater than 255 characters.'
example: b
role:
type: string
description: 'Must not be greater than 255 characters.'
example: 'n'
quote:
type: string
description: ''
example: architecto
rating:
type: integer
description: 'Must be at least 1. Must not be greater than 5.'
example: 2
sort_order:
type: integer
description: 'Must be at least 0. Must not be greater than 100000.'
example: 7
nullable: true
is_active:
type: boolean
description: ''
example: false
security: []
delete:
summary: ''
operationId: deleteApiAdminTestimonialsTestimonial_id
description: ''
parameters: []
responses: { }
tags:
- Endpoints
security: []
parameters:
-
in: path
name: testimonial_id
description: 'The ID of the testimonial.'
example: 16
required: true
schema:
type: integer
/api/admin/join-us:
get:
summary: ''
operationId: getApiAdminJoinUs
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Endpoints
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
search:
type: string
description: 'Must not be greater than 255 characters.'
example: b
nullable: true
enquiry_type:
type: string
description: 'Must not be greater than 120 characters.'
example: 'n'
nullable: true
source:
type: string
description: 'Must not be greater than 100 characters.'
example: g
nullable: true
per_page:
type: integer
description: 'Must be at least 1. Must not be greater than 1000.'
example: 16
nullable: true
sort:
type: string
description: 'Must not be greater than 50 characters.'
example: m
nullable: true
security: []
/api/admin/get-in-touch:
get:
summary: ''
operationId: getApiAdminGetInTouch
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Endpoints
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
search:
type: string
description: 'Must not be greater than 255 characters.'
example: b
nullable: true
source:
type: string
description: 'Must not be greater than 100 characters.'
example: 'n'
nullable: true
per_page:
type: integer
description: 'Must be at least 1. Must not be greater than 1000.'
example: 7
nullable: true
sort:
type: string
description: 'Must not be greater than 50 characters.'
example: z
nullable: true
security: []
/api/admin/get-in-touch/content:
get:
summary: ''
operationId: getApiAdminGetInTouchContent
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Endpoints
security: []
put:
summary: ''
operationId: putApiAdminGetInTouchContent
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
badge_label:
type: string
description: 'Must not be greater than 255 characters.'
example: b
title:
type: string
description: 'Must not be greater than 255 characters.'
example: 'n'
phone_label:
type: string
description: 'Must not be greater than 255 characters.'
example: g
phone_value:
type: string
description: 'Must not be greater than 255 characters.'
example: z
email_label:
type: string
description: 'Must not be greater than 255 characters.'
example: m
email_value:
type: string
description: 'Must not be greater than 255 characters.'
example: i
location_label:
type: string
description: 'Must not be greater than 255 characters.'
example: 'y'
location_value:
type: string
description: 'Must not be greater than 255 characters.'
example: v
required:
- badge_label
- title
- phone_label
- phone_value
- email_label
- email_value
- location_label
- location_value
security: []
patch:
summary: ''
operationId: patchApiAdminGetInTouchContent
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
badge_label:
type: string
description: 'Must not be greater than 255 characters.'
example: b
title:
type: string
description: 'Must not be greater than 255 characters.'
example: 'n'
phone_label:
type: string
description: 'Must not be greater than 255 characters.'
example: g
phone_value:
type: string
description: 'Must not be greater than 255 characters.'
example: z
email_label:
type: string
description: 'Must not be greater than 255 characters.'
example: m
email_value:
type: string
description: 'Must not be greater than 255 characters.'
example: i
location_label:
type: string
description: 'Must not be greater than 255 characters.'
example: 'y'
location_value:
type: string
description: 'Must not be greater than 255 characters.'
example: v
required:
- badge_label
- title
- phone_label
- phone_value
- email_label
- email_value
- location_label
- location_value
security: []
/api/admin/users:
get:
summary: ''
operationId: getApiAdminUsers
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Endpoints
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
search:
type: string
description: 'Must not be greater than 255 characters.'
example: b
role:
type: string
description: ''
example: admin
enum:
- admin
- agent
- client
active:
type: boolean
description: ''
example: true
approved:
type: boolean
description: ''
example: true
per_page:
type: integer
description: 'Must be at least 1. Must not be greater than 1000.'
example: 22
security: []
'/api/admin/users/{user_id}':
get:
summary: ''
operationId: getApiAdminUsersUser_id
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Endpoints
security: []
put:
summary: ''
operationId: putApiAdminUsersUser_id
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Must not be greater than 255 characters.'
example: b
email:
type: string
description: 'Must be a valid email address. Must not be greater than 255 characters.'
example: zbailey@example.net
password:
type: string
description: 'Must be at least 8 characters.'
example: '-0pBNvYgxw'
role:
type: string
description: ''
example: client
enum:
- admin
- agent
- broker
- client
permissions:
type: array
description: ''
example:
- 'testimonials:edit'
items:
type: string
enum:
- 'dashboard:view'
- 'dashboard:edit'
- 'brokers:view'
- 'brokers:edit'
- 'insights:view'
- 'insights:edit'
- 'testimonials:view'
- 'testimonials:edit'
- 'services:view'
- 'services:edit'
- 'profile:view'
- 'profile:edit'
- 'users:view'
- 'users:edit'
- 'join-us:view'
- 'join-us:edit'
- 'get-in-touch:view'
- 'get-in-touch:edit'
active:
type: boolean
description: ''
example: false
approved:
type: boolean
description: ''
example: true
security: []
patch:
summary: ''
operationId: patchApiAdminUsersUser_id
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Must not be greater than 255 characters.'
example: b
email:
type: string
description: 'Must be a valid email address. Must not be greater than 255 characters.'
example: zbailey@example.net
password:
type: string
description: 'Must be at least 8 characters.'
example: '-0pBNvYgxw'
role:
type: string
description: ''
example: broker
enum:
- admin
- agent
- broker
- client
permissions:
type: array
description: ''
example:
- 'services:edit'
items:
type: string
enum:
- 'dashboard:view'
- 'dashboard:edit'
- 'brokers:view'
- 'brokers:edit'
- 'insights:view'
- 'insights:edit'
- 'testimonials:view'
- 'testimonials:edit'
- 'services:view'
- 'services:edit'
- 'profile:view'
- 'profile:edit'
- 'users:view'
- 'users:edit'
- 'join-us:view'
- 'join-us:edit'
- 'get-in-touch:view'
- 'get-in-touch:edit'
active:
type: boolean
description: ''
example: true
approved:
type: boolean
description: ''
example: true
security: []
parameters:
-
in: path
name: user_id
description: 'The ID of the user.'
example: 16
required: true
schema:
type: integer
/api/profile:
get:
summary: ''
operationId: getApiProfile
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Endpoints
security: []
put:
summary: ''
operationId: putApiProfile
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
summary:
type: string
description: ''
example: architecto
nullable: true
profile_content:
type: object
description: ''
example: null
properties:
intro:
type: object
description: ''
example: null
properties:
headline:
type: string
description: 'Must not be greater than 255 characters.'
example: 'n'
nullable: true
paragraphs:
type: array
description: ''
example:
- architecto
items:
type: string
nullable: true
ctaLabel:
type: string
description: 'Must not be greater than 255 characters.'
example: 'n'
nullable: true
nullable: true
sections:
type: array
description: ''
example: null
items:
type: object
nullable: true
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: r
nullable: true
description:
type: string
description: ''
example: 'Eius et animi quos velit et.'
nullable: true
highlights:
type: array
description: 'Must not be greater than 255 characters.'
example:
- v
items:
type: string
nullable: true
accordion:
type: array
description: ''
example: null
items:
type: object
nullable: true
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: d
nullable: true
body:
type: string
description: ''
example: architecto
nullable: true
embed:
type: object
description: ''
example: null
properties:
iframeUrl:
type: string
description: 'This field is required when profile_content.sections.*.accordion.*.embed is present. Must be a valid URL. Must not be greater than 2048 characters.'
example: 'http://bailey.com/'
height:
type: integer
description: 'Must be at least 100. Must not be greater than 2000.'
example: 17
nullable: true
allow:
type: string
description: 'Must not be greater than 255 characters.'
example: i
nullable: true
scrolling:
type: string
description: ''
example: 'no'
enum: ['yes', 'no', auto]
nullable: true
nullable: true
homeLoans:
type: object
description: ''
example: null
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: g
nullable: true
description:
type: string
description: ''
example: 'Eius et animi quos velit et.'
nullable: true
highlights:
type: array
description: 'Must not be greater than 255 characters.'
example:
- v
items:
type: string
nullable: true
accordion:
type: array
description: ''
example: null
items:
type: object
nullable: true
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: 'y'
nullable: true
body:
type: string
description: ''
example: architecto
nullable: true
embed:
type: object
description: ''
example: null
properties:
iframeUrl:
type: string
description: 'This field is required when profile_content.homeLoans.accordion.*.embed is present. Must be a valid URL. Must not be greater than 2048 characters.'
example: 'http://bailey.com/'
height:
type: integer
description: 'Must be at least 100. Must not be greater than 2000.'
example: 17
nullable: true
allow:
type: string
description: 'Must not be greater than 255 characters.'
example: i
nullable: true
scrolling:
type: string
description: ''
example: auto
enum:
- 'yes'
- 'no'
- auto
nullable: true
nullable: true
nullable: true
commercialLoans:
type: object
description: ''
example: null
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: d
nullable: true
description:
type: string
description: ''
example: 'Eius et animi quos velit et.'
nullable: true
highlights:
type: array
description: 'Must not be greater than 255 characters.'
example:
- v
items:
type: string
nullable: true
accordion:
type: array
description: ''
example: null
items:
type: object
nullable: true
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: 'y'
nullable: true
body:
type: string
description: ''
example: architecto
nullable: true
embed:
type: object
description: ''
example: null
properties:
iframeUrl:
type: string
description: 'This field is required when profile_content.commercialLoans.accordion.*.embed is present. Must be a valid URL. Must not be greater than 2048 characters.'
example: 'http://bailey.com/'
height:
type: integer
description: 'Must be at least 100. Must not be greater than 2000.'
example: 17
nullable: true
allow:
type: string
description: 'Must not be greater than 255 characters.'
example: i
nullable: true
scrolling:
type: string
description: ''
example: 'no'
enum:
- 'yes'
- 'no'
- auto
nullable: true
nullable: true
nullable: true
otherLoans:
type: object
description: ''
example: null
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: d
nullable: true
description:
type: string
description: ''
example: 'Eius et animi quos velit et.'
nullable: true
highlights:
type: array
description: 'Must not be greater than 255 characters.'
example:
- v
items:
type: string
nullable: true
accordion:
type: array
description: ''
example: null
items:
type: object
nullable: true
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: 'y'
nullable: true
body:
type: string
description: ''
example: architecto
nullable: true
embed:
type: object
description: ''
example: null
properties:
iframeUrl:
type: string
description: 'This field is required when profile_content.otherLoans.accordion.*.embed is present. Must be a valid URL. Must not be greater than 2048 characters.'
example: 'http://bailey.com/'
height:
type: integer
description: 'Must be at least 100. Must not be greater than 2000.'
example: 17
nullable: true
allow:
type: string
description: 'Must not be greater than 255 characters.'
example: i
nullable: true
scrolling:
type: string
description: ''
example: 'no'
enum:
- 'yes'
- 'no'
- auto
nullable: true
nullable: true
nullable: true
contact:
type: object
description: ''
example: null
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: d
nullable: true
formEmbedUrl:
type: string
description: 'Must be a valid URL. Must not be greater than 2048 characters.'
example: 'https://gaylord.com/modi-deserunt-aut-ab-provident-perspiciatis.html'
nullable: true
mapEmbedUrl:
type: string
description: 'Must not be greater than 2048 characters.'
example: 'http://www.cruickshank.com/adipisci-quidem-nostrum-qui-commodi-incidunt-iure'
nullable: true
nullable: true
nullable: true
security: []
patch:
summary: ''
operationId: patchApiProfile
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
summary:
type: string
description: ''
example: architecto
nullable: true
profile_content:
type: object
description: ''
example: null
properties:
intro:
type: object
description: ''
example: null
properties:
headline:
type: string
description: 'Must not be greater than 255 characters.'
example: 'n'
nullable: true
paragraphs:
type: array
description: ''
example:
- architecto
items:
type: string
nullable: true
ctaLabel:
type: string
description: 'Must not be greater than 255 characters.'
example: 'n'
nullable: true
nullable: true
sections:
type: array
description: ''
example: null
items:
type: object
nullable: true
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: r
nullable: true
description:
type: string
description: ''
example: 'Eius et animi quos velit et.'
nullable: true
highlights:
type: array
description: 'Must not be greater than 255 characters.'
example:
- v
items:
type: string
nullable: true
accordion:
type: array
description: ''
example: null
items:
type: object
nullable: true
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: d
nullable: true
body:
type: string
description: ''
example: architecto
nullable: true
embed:
type: object
description: ''
example: null
properties:
iframeUrl:
type: string
description: 'This field is required when profile_content.sections.*.accordion.*.embed is present. Must be a valid URL. Must not be greater than 2048 characters.'
example: 'http://bailey.com/'
height:
type: integer
description: 'Must be at least 100. Must not be greater than 2000.'
example: 17
nullable: true
allow:
type: string
description: 'Must not be greater than 255 characters.'
example: i
nullable: true
scrolling:
type: string
description: ''
example: 'no'
enum: ['yes', 'no', auto]
nullable: true
nullable: true
homeLoans:
type: object
description: ''
example: null
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: g
nullable: true
description:
type: string
description: ''
example: 'Eius et animi quos velit et.'
nullable: true
highlights:
type: array
description: 'Must not be greater than 255 characters.'
example:
- v
items:
type: string
nullable: true
accordion:
type: array
description: ''
example: null
items:
type: object
nullable: true
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: 'y'
nullable: true
body:
type: string
description: ''
example: architecto
nullable: true
embed:
type: object
description: ''
example: null
properties:
iframeUrl:
type: string
description: 'This field is required when profile_content.homeLoans.accordion.*.embed is present. Must be a valid URL. Must not be greater than 2048 characters.'
example: 'http://bailey.com/'
height:
type: integer
description: 'Must be at least 100. Must not be greater than 2000.'
example: 17
nullable: true
allow:
type: string
description: 'Must not be greater than 255 characters.'
example: i
nullable: true
scrolling:
type: string
description: ''
example: 'yes'
enum:
- 'yes'
- 'no'
- auto
nullable: true
nullable: true
nullable: true
commercialLoans:
type: object
description: ''
example: null
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: d
nullable: true
description:
type: string
description: ''
example: 'Eius et animi quos velit et.'
nullable: true
highlights:
type: array
description: 'Must not be greater than 255 characters.'
example:
- v
items:
type: string
nullable: true
accordion:
type: array
description: ''
example: null
items:
type: object
nullable: true
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: 'y'
nullable: true
body:
type: string
description: ''
example: architecto
nullable: true
embed:
type: object
description: ''
example: null
properties:
iframeUrl:
type: string
description: 'This field is required when profile_content.commercialLoans.accordion.*.embed is present. Must be a valid URL. Must not be greater than 2048 characters.'
example: 'http://bailey.com/'
height:
type: integer
description: 'Must be at least 100. Must not be greater than 2000.'
example: 17
nullable: true
allow:
type: string
description: 'Must not be greater than 255 characters.'
example: i
nullable: true
scrolling:
type: string
description: ''
example: auto
enum:
- 'yes'
- 'no'
- auto
nullable: true
nullable: true
nullable: true
otherLoans:
type: object
description: ''
example: null
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: d
nullable: true
description:
type: string
description: ''
example: 'Eius et animi quos velit et.'
nullable: true
highlights:
type: array
description: 'Must not be greater than 255 characters.'
example:
- v
items:
type: string
nullable: true
accordion:
type: array
description: ''
example: null
items:
type: object
nullable: true
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: 'y'
nullable: true
body:
type: string
description: ''
example: architecto
nullable: true
embed:
type: object
description: ''
example: null
properties:
iframeUrl:
type: string
description: 'This field is required when profile_content.otherLoans.accordion.*.embed is present. Must be a valid URL. Must not be greater than 2048 characters.'
example: 'http://bailey.com/'
height:
type: integer
description: 'Must be at least 100. Must not be greater than 2000.'
example: 17
nullable: true
allow:
type: string
description: 'Must not be greater than 255 characters.'
example: i
nullable: true
scrolling:
type: string
description: ''
example: 'yes'
enum:
- 'yes'
- 'no'
- auto
nullable: true
nullable: true
nullable: true
contact:
type: object
description: ''
example: null
properties:
title:
type: string
description: 'Must not be greater than 255 characters.'
example: d
nullable: true
formEmbedUrl:
type: string
description: 'Must be a valid URL. Must not be greater than 2048 characters.'
example: 'https://gaylord.com/modi-deserunt-aut-ab-provident-perspiciatis.html'
nullable: true
mapEmbedUrl:
type: string
description: 'Must not be greater than 2048 characters.'
example: 'http://www.cruickshank.com/adipisci-quidem-nostrum-qui-commodi-incidunt-iure'
nullable: true
nullable: true
nullable: true
security: []
/api/profile/images:
post:
summary: ''
operationId: postApiProfileImages
description: ''
parameters: []
responses: { }
tags:
- Endpoints
requestBody:
required: false
content:
multipart/form-data:
schema:
type: object
properties:
featured_image:
type: string
format: binary
description: 'Must be a file. Must be an image. Must not be greater than 2048 kilobytes.'
featured_images:
type: array
description: 'Must be a file. Must be an image. Must not be greater than 2048 kilobytes.'
items:
type: string
format: binary
avatar:
type: string
format: binary
description: 'Must be a file. Must be an image. Must not be greater than 4096 kilobytes.'
avatars:
type: array
description: 'Must be a file. Must be an image. Must not be greater than 4096 kilobytes.'
items:
type: string
format: binary
security: []
/api/admin/zoho/status:
get:
summary: 'Get Zoho connection status.'
operationId: getZohoConnectionStatus
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
connected: true
expires_at: '2026-04-09T10:12:30Z'
api_domain: 'https://www.zohoapis.com'
scope: ZohoCRM.modules.ALL
properties:
data:
type: object
properties:
connected:
type: boolean
example: true
expires_at:
type: string
example: '2026-04-09T10:12:30Z'
api_domain:
type: string
example: 'https://www.zohoapis.com'
scope:
type: string
example: ZohoCRM.modules.ALL
tags:
- 'Zoho CRM'
/api/admin/zoho/oauth/url:
get:
summary: 'Get Zoho OAuth authorization URL.'
operationId: getZohoOAuthAuthorizationURL
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
url: 'https://accounts.zoho.com/oauth/v2/auth?...'
properties:
data:
type: object
properties:
url:
type: string
example: 'https://accounts.zoho.com/oauth/v2/auth?...'
tags:
- 'Zoho CRM'
/api/admin/zoho/oauth/callback:
post:
summary: 'Exchange Zoho OAuth code for tokens.'
operationId: exchangeZohoOAuthCodeForTokens
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
connected: true
expires_at: '2026-04-09T10:12:30Z'
api_domain: 'https://www.zohoapis.com'
scope: ZohoCRM.modules.ALL
properties:
data:
type: object
properties:
connected:
type: boolean
example: true
expires_at:
type: string
example: '2026-04-09T10:12:30Z'
api_domain:
type: string
example: 'https://www.zohoapis.com'
scope:
type: string
example: ZohoCRM.modules.ALL
tags:
- 'Zoho CRM'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
code:
type: string
description: ''
example: architecto
accounts_server:
type: string
description: ''
example: architecto
nullable: true
location:
type: string
description: ''
example: architecto
nullable: true
required:
- code
/api/admin/zoho/oauth/revoke:
post:
summary: 'Revoke Zoho OAuth tokens.'
operationId: revokeZohoOAuthTokens
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
message: 'Zoho CRM connection revoked.'
properties:
data:
type: object
properties:
message:
type: string
example: 'Zoho CRM connection revoked.'
tags:
- 'Zoho CRM'