Bearer {YOUR_AUTH_TOKEN}.'
security:
-
default: []
paths:
/api/v1/admin/about-page:
get:
summary: 'Get current about page content.'
operationId: getCurrentAboutPageContent
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'About page content retrieved successfully'
data:
id: 1
page_title: 'About Us'
side_image: 'http://localhost/images/about/side.jpg'
heading: Welcome
description: Description
our_mission_text: 'Mission text'
our_vision_text: 'Vision text'
our_values_text: 'Values text'
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'About page content retrieved successfully'
data:
type: object
properties:
id:
type: integer
example: 1
page_title:
type: string
example: 'About Us'
side_image:
type: string
example: 'http://localhost/images/about/side.jpg'
heading:
type: string
example: Welcome
description:
type: string
example: Description
our_mission_text:
type: string
example: 'Mission text'
our_vision_text:
type: string
example: 'Vision text'
our_values_text:
type: string
example: 'Values text'
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
tags:
- 'Admin About Page'
put:
summary: 'Update about page content.'
operationId: updateAboutPageContent
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'About page content updated successfully'
data:
id: 1
page_title: 'About Us'
side_image: 'http://localhost/images/about/side.jpg'
heading: Welcome
description: Description
our_mission_text: 'Mission text'
our_vision_text: 'Vision text'
our_values_text: 'Values text'
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'About page content updated successfully'
data:
type: object
properties:
id:
type: integer
example: 1
page_title:
type: string
example: 'About Us'
side_image:
type: string
example: 'http://localhost/images/about/side.jpg'
heading:
type: string
example: Welcome
description:
type: string
example: Description
our_mission_text:
type: string
example: 'Mission text'
our_vision_text:
type: string
example: 'Vision text'
our_values_text:
type: string
example: 'Values text'
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
page_title:
- 'The page title field is required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
page_title:
type: array
example:
- 'The page title field is required.'
items:
type: string
tags:
- 'Admin About Page'
requestBody:
required: false
content:
multipart/form-data:
schema:
type: object
properties:
page_title:
type: string
description: 'optional Page title.'
example: 'About Us'
nullable: true
side_image:
type: string
format: binary
description: 'optional Side image (max 5MB, jpeg/png/jpg/gif/webp).'
nullable: true
heading:
type: string
description: 'optional Heading.'
example: 'Welcome to Our Company'
nullable: true
description:
type: string
description: 'optional Description.'
example: 'We are a leading company'
nullable: true
our_mission_text:
type: string
description: 'optional Our mission text.'
example: 'Our mission is to...'
nullable: true
our_vision_text:
type: string
description: 'optional Our vision text.'
example: 'Our vision is to...'
nullable: true
our_values_text:
type: string
description: 'optional Our values text.'
example: 'Our values are...'
nullable: true
patch:
summary: 'Update about page content.'
operationId: updateAboutPageContent
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'About page content updated successfully'
data:
id: 1
page_title: 'About Us'
side_image: 'http://localhost/images/about/side.jpg'
heading: Welcome
description: Description
our_mission_text: 'Mission text'
our_vision_text: 'Vision text'
our_values_text: 'Values text'
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'About page content updated successfully'
data:
type: object
properties:
id:
type: integer
example: 1
page_title:
type: string
example: 'About Us'
side_image:
type: string
example: 'http://localhost/images/about/side.jpg'
heading:
type: string
example: Welcome
description:
type: string
example: Description
our_mission_text:
type: string
example: 'Mission text'
our_vision_text:
type: string
example: 'Vision text'
our_values_text:
type: string
example: 'Values text'
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
page_title:
- 'The page title field is required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
page_title:
type: array
example:
- 'The page title field is required.'
items:
type: string
tags:
- 'Admin About Page'
requestBody:
required: false
content:
multipart/form-data:
schema:
type: object
properties:
page_title:
type: string
description: 'optional Page title.'
example: 'About Us'
nullable: true
side_image:
type: string
format: binary
description: 'optional Side image (max 5MB, jpeg/png/jpg/gif/webp).'
nullable: true
heading:
type: string
description: 'optional Heading.'
example: 'Welcome to Our Company'
nullable: true
description:
type: string
description: 'optional Description.'
example: 'We are a leading company'
nullable: true
our_mission_text:
type: string
description: 'optional Our mission text.'
example: 'Our mission is to...'
nullable: true
our_vision_text:
type: string
description: 'optional Our vision text.'
example: 'Our vision is to...'
nullable: true
our_values_text:
type: string
description: 'optional Our values text.'
example: 'Our values are...'
nullable: true
/api/v1/admin/blog-categories:
get:
summary: 'List blog categories (admin).'
operationId: listBlogCategoriesadmin
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Blog categories retrieved'
data:
-
id: 1
name: Tech
is_active: true
blogs_count: 5
created_at: '2026-01-21T12:00:00+00:00'
updated_at: '2026-01-21T12:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Blog categories retrieved'
data:
type: array
example:
-
id: 1
name: Tech
is_active: true
blogs_count: 5
created_at: '2026-01-21T12:00:00+00:00'
updated_at: '2026-01-21T12:00:00+00:00'
items:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: Tech
is_active:
type: boolean
example: true
blogs_count:
type: integer
example: 5
created_at:
type: string
example: '2026-01-21T12:00:00+00:00'
updated_at:
type: string
example: '2026-01-21T12:00:00+00:00'
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
tags:
- 'Admin Blogs'
post:
summary: 'Create a blog category.'
operationId: createABlogCategory
description: ''
parameters: []
responses:
201:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Blog category created'
data:
id: 1
name: Technology
is_active: true
blogs_count: 0
created_at: '2026-01-21T12:00:00+00:00'
updated_at: '2026-01-21T12:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Blog category created'
data:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: Technology
is_active:
type: boolean
example: true
blogs_count:
type: integer
example: 0
created_at:
type: string
example: '2026-01-21T12:00:00+00:00'
updated_at:
type: string
example: '2026-01-21T12:00:00+00:00'
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'The name has already been taken.'
errors:
name:
- 'The name has already been taken.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'The name has already been taken.'
errors:
type: object
properties:
name:
type: array
example:
- 'The name has already been taken.'
items:
type: string
tags:
- 'Admin Blogs'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Category name.'
example: Technology
is_active:
type: boolean
description: 'optional Whether category is active.'
example: true
required:
- name
'/api/v1/admin/blog-categories/{id}':
get:
summary: 'Show a single category (admin).'
operationId: showASingleCategoryadmin
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Blog category retrieved'
data:
id: 1
name: Technology
is_active: true
blogs_count: 3
created_at: '2026-01-21T12:00:00+00:00'
updated_at: '2026-01-21T12:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Blog category retrieved'
data:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: Technology
is_active:
type: boolean
example: true
blogs_count:
type: integer
example: 3
created_at:
type: string
example: '2026-01-21T12:00:00+00:00'
updated_at:
type: string
example: '2026-01-21T12:00:00+00:00'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Blog category not found'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Blog category not found'
tags:
- 'Admin Blogs'
put:
summary: 'Update a category.'
operationId: updateACategory
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Blog category updated'
data:
id: 1
name: AI
is_active: false
blogs_count: 3
created_at: '2026-01-21T12:00:00+00:00'
updated_at: '2026-01-21T12:10:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Blog category updated'
data:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: AI
is_active:
type: boolean
example: false
blogs_count:
type: integer
example: 3
created_at:
type: string
example: '2026-01-21T12:00:00+00:00'
updated_at:
type: string
example: '2026-01-21T12:10:00+00:00'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Blog category not found'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Blog category not found'
tags:
- 'Admin Blogs'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'optional Category name.'
example: AI
is_active:
type: boolean
description: 'optional Whether active.'
example: false
delete:
summary: 'Delete a category.'
operationId: deleteACategory
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Blog category deleted'
data: null
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Blog category deleted'
data:
type: string
example: null
nullable: true
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Blog category not found'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Blog category not found'
tags:
- 'Admin Blogs'
parameters:
-
in: path
name: id
description: 'The category ID.'
example: 1
required: true
schema:
type: integer
/api/v1/admin/blogs:
get:
summary: 'List blogs for admin.'
operationId: listBlogsForAdmin
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Blogs retrieved'
data:
-
id: 1
name: 'Launch Update'
blog_category_id: 2
category:
id: 2
name: News
is_active: true
blogs_count: 1
thumbnail_image: 'https://cdn/img.png'
description: 'Short summary'
share_facebook: true
share_twitter: false
share_linkedin: true
is_active: true
sections:
-
id: 1
heading: Intro
description: ...
image: null
position: left
button_name: null
button_url: null
order: 0
created_at: '2026-01-21T12:00:00+00:00'
updated_at: '2026-01-21T12:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Blogs retrieved'
data:
type: array
example:
-
id: 1
name: 'Launch Update'
blog_category_id: 2
category:
id: 2
name: News
is_active: true
blogs_count: 1
thumbnail_image: 'https://cdn/img.png'
description: 'Short summary'
share_facebook: true
share_twitter: false
share_linkedin: true
is_active: true
sections:
-
id: 1
heading: Intro
description: ...
image: null
position: left
button_name: null
button_url: null
order: 0
created_at: '2026-01-21T12:00:00+00:00'
updated_at: '2026-01-21T12:00:00+00:00'
items:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'Launch Update'
blog_category_id:
type: integer
example: 2
category:
type: object
properties:
id:
type: integer
example: 2
name:
type: string
example: News
is_active:
type: boolean
example: true
blogs_count:
type: integer
example: 1
thumbnail_image:
type: string
example: 'https://cdn/img.png'
description:
type: string
example: 'Short summary'
share_facebook:
type: boolean
example: true
share_twitter:
type: boolean
example: false
share_linkedin:
type: boolean
example: true
is_active:
type: boolean
example: true
sections:
type: array
example:
-
id: 1
heading: Intro
description: ...
image: null
position: left
button_name: null
button_url: null
order: 0
items:
type: object
properties:
id:
type: integer
example: 1
heading:
type: string
example: Intro
description:
type: string
example: ...
image:
type: string
example: null
nullable: true
position:
type: string
example: left
button_name:
type: string
example: null
nullable: true
button_url:
type: string
example: null
nullable: true
order:
type: integer
example: 0
created_at:
type: string
example: '2026-01-21T12:00:00+00:00'
updated_at:
type: string
example: '2026-01-21T12:00:00+00:00'
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
tags:
- 'Admin Blogs'
post:
summary: 'Create a blog with sections.'
operationId: createABlogWithSections
description: ''
parameters: []
responses:
201:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Blog created'
data:
id: 1
name: 'Launch Update'
blog_category_id: 2
thumbnail_image: 'https://cdn/img.png'
description: ...
share_facebook: true
share_twitter: false
share_linkedin: true
is_active: true
sections:
-
id: 1
heading: Intro
description: ...
image: null
position: left
button_name: null
button_url: null
order: 0
created_at: '2026-01-21T12:00:00+00:00'
updated_at: '2026-01-21T12:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Blog created'
data:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'Launch Update'
blog_category_id:
type: integer
example: 2
thumbnail_image:
type: string
example: 'https://cdn/img.png'
description:
type: string
example: ...
share_facebook:
type: boolean
example: true
share_twitter:
type: boolean
example: false
share_linkedin:
type: boolean
example: true
is_active:
type: boolean
example: true
sections:
type: array
example:
-
id: 1
heading: Intro
description: ...
image: null
position: left
button_name: null
button_url: null
order: 0
items:
type: object
properties:
id:
type: integer
example: 1
heading:
type: string
example: Intro
description:
type: string
example: ...
image:
type: string
example: null
nullable: true
position:
type: string
example: left
button_name:
type: string
example: null
nullable: true
button_url:
type: string
example: null
nullable: true
order:
type: integer
example: 0
created_at:
type: string
example: '2026-01-21T12:00:00+00:00'
updated_at:
type: string
example: '2026-01-21T12:00:00+00:00'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
sections.0.heading:
- 'The heading field is required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
sections.0.heading:
type: array
example:
- 'The heading field is required.'
items:
type: string
tags:
- 'Admin Blogs'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Blog title.'
example: 'Launch Update'
blog_category_id:
type: integer
description: 'Category ID.'
example: 2
thumbnail_image:
type: string
description: 'Thumbnail URL/path.'
example: 'https://cdn/img.png'
description:
type: string
description: 'Blog description/summary.'
example: 'Eius et animi quos velit et.'
share_facebook:
type: boolean
description: 'optional Enable Facebook share.'
example: true
share_twitter:
type: boolean
description: 'optional Enable Twitter share.'
example: false
share_linkedin:
type: boolean
description: 'optional Enable LinkedIn share.'
example: true
is_active:
type: boolean
description: 'optional Mark blog active.'
example: true
sections:
type: array
description: 'Array of blog sections.'
example:
- architecto
items:
type: string
required:
- name
- blog_category_id
- thumbnail_image
- description
- sections
'/api/v1/admin/blogs/{id}':
get:
summary: 'Show a blog (admin).'
operationId: showABlogadmin
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Blog retrieved'
data:
id: 1
name: 'Launch Update'
blog_category_id: 2
category:
id: 2
name: News
is_active: true
blogs_count: 1
thumbnail_image: 'https://cdn/img.png'
description: ...
share_facebook: true
share_twitter: false
share_linkedin: true
is_active: true
sections:
-
id: 1
heading: Intro
description: ...
image: null
position: left
button_name: null
button_url: null
order: 0
created_at: '2026-01-21T12:00:00+00:00'
updated_at: '2026-01-21T12:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Blog retrieved'
data:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'Launch Update'
blog_category_id:
type: integer
example: 2
category:
type: object
properties:
id:
type: integer
example: 2
name:
type: string
example: News
is_active:
type: boolean
example: true
blogs_count:
type: integer
example: 1
thumbnail_image:
type: string
example: 'https://cdn/img.png'
description:
type: string
example: ...
share_facebook:
type: boolean
example: true
share_twitter:
type: boolean
example: false
share_linkedin:
type: boolean
example: true
is_active:
type: boolean
example: true
sections:
type: array
example:
-
id: 1
heading: Intro
description: ...
image: null
position: left
button_name: null
button_url: null
order: 0
items:
type: object
properties:
id:
type: integer
example: 1
heading:
type: string
example: Intro
description:
type: string
example: ...
image:
type: string
example: null
nullable: true
position:
type: string
example: left
button_name:
type: string
example: null
nullable: true
button_url:
type: string
example: null
nullable: true
order:
type: integer
example: 0
created_at:
type: string
example: '2026-01-21T12:00:00+00:00'
updated_at:
type: string
example: '2026-01-21T12:00:00+00:00'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Blog not found'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Blog not found'
tags:
- 'Admin Blogs'
put:
summary: 'Update a blog and its sections.'
operationId: updateABlogAndItsSections
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Blog updated'
data:
id: 1
name: 'Launch Update v2'
blog_category_id: 2
thumbnail_image: 'https://cdn/img2.png'
description: ...
share_facebook: true
share_twitter: false
share_linkedin: true
is_active: true
sections:
-
id: 1
heading: Intro
description: ...
image: null
position: left
button_name: null
button_url: null
order: 0
created_at: '2026-01-21T12:00:00+00:00'
updated_at: '2026-01-21T12:10:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Blog updated'
data:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'Launch Update v2'
blog_category_id:
type: integer
example: 2
thumbnail_image:
type: string
example: 'https://cdn/img2.png'
description:
type: string
example: ...
share_facebook:
type: boolean
example: true
share_twitter:
type: boolean
example: false
share_linkedin:
type: boolean
example: true
is_active:
type: boolean
example: true
sections:
type: array
example:
-
id: 1
heading: Intro
description: ...
image: null
position: left
button_name: null
button_url: null
order: 0
items:
type: object
properties:
id:
type: integer
example: 1
heading:
type: string
example: Intro
description:
type: string
example: ...
image:
type: string
example: null
nullable: true
position:
type: string
example: left
button_name:
type: string
example: null
nullable: true
button_url:
type: string
example: null
nullable: true
order:
type: integer
example: 0
created_at:
type: string
example: '2026-01-21T12:00:00+00:00'
updated_at:
type: string
example: '2026-01-21T12:10:00+00:00'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Blog not found'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Blog not found'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'One or more section ids are invalid for this blog.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'One or more section ids are invalid for this blog.'
tags:
- 'Admin Blogs'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'optional Blog title.'
example: 'Launch Update v2'
blog_category_id:
type: integer
description: 'optional Category ID.'
example: 2
thumbnail_image:
type: string
description: 'optional Thumbnail URL/path.'
example: 'https://cdn/img2.png'
description:
type: string
description: 'optional Blog description/summary.'
example: 'Eius et animi quos velit et.'
share_facebook:
type: boolean
description: 'optional Enable Facebook share.'
example: false
share_twitter:
type: boolean
description: 'optional Enable Twitter share.'
example: false
share_linkedin:
type: boolean
description: 'optional Enable LinkedIn share.'
example: false
is_active:
type: boolean
description: 'optional Mark blog active.'
example: false
sections:
type: array
description: 'optional Array of sections (replaces existing; omitted keeps current).'
example:
- architecto
items:
type: string
delete:
summary: 'Delete a blog.'
operationId: deleteABlog
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Blog deleted'
data: null
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Blog deleted'
data:
type: string
example: null
nullable: true
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Blog not found'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Blog not found'
tags:
- 'Admin Blogs'
parameters:
-
in: path
name: id
description: 'Blog ID.'
example: 1
required: true
schema:
type: integer
/api/v1/admin/commission-settings:
get:
summary: 'Get current commission (platform fee) settings.'
operationId: getCurrentCommissionplatformFeeSettings
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Commission settings retrieved successfully'
data:
id: 1
platform_fee_company_percent: 10
platform_fee_expert_percent: 5
is_enabled: true
created_at: '2026-02-12T00:00:00+00:00'
updated_at: '2026-02-12T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Commission settings retrieved successfully'
data:
type: object
properties:
id:
type: integer
example: 1
platform_fee_company_percent:
type: integer
example: 10
platform_fee_expert_percent:
type: integer
example: 5
is_enabled:
type: boolean
example: true
created_at:
type: string
example: '2026-02-12T00:00:00+00:00'
updated_at:
type: string
example: '2026-02-12T00:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
tags:
- 'Admin Commission Settings'
put:
summary: 'Update commission (platform fee) settings.'
operationId: updateCommissionplatformFeeSettings
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Commission settings updated successfully'
data:
id: 1
platform_fee_company_percent: 10
platform_fee_expert_percent: 5
is_enabled: true
created_at: '2026-02-12T00:00:00+00:00'
updated_at: '2026-02-12T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Commission settings updated successfully'
data:
type: object
properties:
id:
type: integer
example: 1
platform_fee_company_percent:
type: integer
example: 10
platform_fee_expert_percent:
type: integer
example: 5
is_enabled:
type: boolean
example: true
created_at:
type: string
example: '2026-02-12T00:00:00+00:00'
updated_at:
type: string
example: '2026-02-12T00:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
platform_fee_company_percent:
- 'Platform fee for companies must not exceed 100.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
platform_fee_company_percent:
type: array
example:
- 'Platform fee for companies must not exceed 100.'
items:
type: string
tags:
- 'Admin Commission Settings'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
platform_fee_company_percent:
type: number
description: 'optional Platform fee percentage charged to companies on each milestone (0-100).'
example: 10.0
nullable: true
platform_fee_expert_percent:
type: number
description: 'optional Platform fee percentage deducted from expert payout per milestone (0-100).'
example: 5.0
nullable: true
is_enabled:
type: boolean
description: 'optional Whether commission is applied. Set to false to turn commission off entirely.'
example: true
nullable: true
patch:
summary: 'Update commission (platform fee) settings.'
operationId: updateCommissionplatformFeeSettings
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Commission settings updated successfully'
data:
id: 1
platform_fee_company_percent: 10
platform_fee_expert_percent: 5
is_enabled: true
created_at: '2026-02-12T00:00:00+00:00'
updated_at: '2026-02-12T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Commission settings updated successfully'
data:
type: object
properties:
id:
type: integer
example: 1
platform_fee_company_percent:
type: integer
example: 10
platform_fee_expert_percent:
type: integer
example: 5
is_enabled:
type: boolean
example: true
created_at:
type: string
example: '2026-02-12T00:00:00+00:00'
updated_at:
type: string
example: '2026-02-12T00:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
platform_fee_company_percent:
- 'Platform fee for companies must not exceed 100.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
platform_fee_company_percent:
type: array
example:
- 'Platform fee for companies must not exceed 100.'
items:
type: string
tags:
- 'Admin Commission Settings'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
platform_fee_company_percent:
type: number
description: 'optional Platform fee percentage charged to companies on each milestone (0-100).'
example: 10.0
nullable: true
platform_fee_expert_percent:
type: number
description: 'optional Platform fee percentage deducted from expert payout per milestone (0-100).'
example: 5.0
nullable: true
is_enabled:
type: boolean
description: 'optional Whether commission is applied. Set to false to turn commission off entirely.'
example: true
nullable: true
/api/v1/admin/dashboard:
get:
summary: 'Get admin dashboard summary: totals and recent projects, experts, companies.'
operationId: getAdminDashboardSummaryTotalsAndRecentProjectsExpertsCompanies
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Dashboard data retrieved successfully'
data:
total_projects: 100
total_companies: 50
total_experts: 200
recent_projects: []
recent_experts: []
recent_companies: []
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Dashboard data retrieved successfully'
data:
type: object
properties:
total_projects:
type: integer
example: 100
total_companies:
type: integer
example: 50
total_experts:
type: integer
example: 200
recent_projects:
type: array
example: []
recent_experts:
type: array
example: []
recent_companies:
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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
tags:
- 'Admin Dashboard'
/api/v1/admin/dispute-categories:
get:
summary: 'List all dispute categories (admin).'
operationId: listAllDisputeCategoriesadmin
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 Dispute Categories'
post:
summary: 'Store a new dispute category.'
operationId: storeANewDisputeCategory
description: ''
parameters: []
responses: { }
tags:
- 'Admin Dispute Categories'
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
'/api/v1/admin/dispute-categories/{id}':
get:
summary: 'Show a single dispute category.'
operationId: showASingleDisputeCategory
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 Dispute Categories'
put:
summary: 'Update a dispute category.'
operationId: updateADisputeCategory
description: ''
parameters: []
responses: { }
tags:
- 'Admin Dispute Categories'
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
delete:
summary: 'Delete a dispute category.'
operationId: deleteADisputeCategory
description: ''
parameters: []
responses: { }
tags:
- 'Admin Dispute Categories'
parameters:
-
in: path
name: id
description: 'The ID of the dispute category.'
example: 16
required: true
schema:
type: integer
/api/v1/admin/disputes:
get:
summary: 'List all disputes (admin).'
operationId: listAllDisputesadmin
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'
'/api/v1/admin/disputes/{dispute_id}':
get:
summary: 'Show a single dispute (admin).'
operationId: showASingleDisputeadmin
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'
parameters:
-
in: path
name: dispute_id
description: 'The ID of the dispute.'
example: 16
required: true
schema:
type: integer
'/api/v1/admin/disputes/{dispute_id}/mark-solved':
post:
summary: 'Mark a dispute as solved (set status to completed or ongoing).'
operationId: markADisputeAsSolvedsetStatusToCompletedOrOngoing
description: ''
parameters: []
responses: { }
tags:
- 'Admin Disputes'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
status:
type: string
description: ''
example: completed
enum:
- ongoing
- completed
required:
- status
parameters:
-
in: path
name: dispute_id
description: 'The ID of the dispute.'
example: 16
required: true
schema:
type: integer
/api/v1/admin/expert-milestone-payments:
get:
summary: 'List milestone payments to be done for experts (company has paid; optionally filter by expert/project).'
operationId: listMilestonePaymentsToBeDoneForExpertscompanyHasPaidOptionallyFilterByExpertproject
description: ''
parameters:
-
in: query
name: expert_id
description: 'optional Filter by expert (awarded user) ID.'
example: 2
required: false
schema:
type: integer
description: 'optional Filter by expert (awarded user) ID.'
example: 2
-
in: query
name: project_id
description: 'optional Filter by project ID.'
example: 1
required: false
schema:
type: integer
description: 'optional Filter by project ID.'
example: 1
-
in: query
name: per_page
description: 'optional Per page (1-100).'
example: 15
required: false
schema:
type: integer
description: 'optional Per page (1-100).'
example: 15
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Expert milestone payments retrieved successfully'
data:
data: []
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Expert milestone payments retrieved successfully'
data:
type: object
properties:
data:
type: array
example: []
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
tags:
- 'Admin Expert Milestone Payments'
'/api/v1/admin/expert-milestone-payments/{milestone_payment}/mark-paid':
post:
summary: 'Mark expert payment as done (payment mode + upload receipt).'
operationId: markExpertPaymentAsDonepaymentMode+UploadReceipt
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Expert payment marked as done'
data: { }
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Expert payment marked as done'
data:
type: object
properties: { }
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Milestone not found.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Milestone not found.'
422:
description: ''
content:
application/json:
schema:
oneOf:
-
description: ''
type: object
example:
success: false
message: 'Company has not paid this milestone yet.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Company has not paid this milestone yet.'
-
description: ''
type: object
example:
success: false
message: 'Expert payment for this milestone is already marked as done.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Expert payment for this milestone is already marked as done.'
tags:
- 'Admin Expert Milestone Payments'
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
payment_mode:
type: string
description: 'paypal or bank_transfer.'
example: paypal
receipt:
type: string
format: binary
description: 'Payment receipt (jpeg, jpg, png, pdf, max 5MB).'
required:
- payment_mode
- receipt
parameters:
-
in: path
name: milestone_payment
description: ''
example: 16
required: true
schema:
type: integer
'/api/v1/admin/experts/{expert_id}/proposals':
get:
summary: 'List all proposals submitted by an expert.'
operationId: listAllProposalsSubmittedByAnExpert
description: ''
parameters:
-
in: query
name: per_page
description: 'optional Per page (1-100).'
example: 15
required: false
schema:
type: integer
description: 'optional Per page (1-100).'
example: 15
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Proposals retrieved successfully'
data:
data: []
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Proposals retrieved successfully'
data:
type: object
properties:
data:
type: array
example: []
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'User is not an expert.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'User is not an expert.'
tags:
- 'Admin Expert Projects'
parameters:
-
in: path
name: expert_id
description: 'The ID of the expert.'
example: 1
required: true
schema:
type: integer
-
in: path
name: expert
description: 'The expert (user) ID.'
example: 2
required: true
schema:
type: integer
'/api/v1/admin/experts/{expert_id}/awarded-projects':
get:
summary: 'List all awarded projects for an expert (projects where this expert was awarded and accepted).'
operationId: listAllAwardedProjectsForAnExpertprojectsWhereThisExpertWasAwardedAndAccepted
description: ''
parameters:
-
in: query
name: per_page
description: 'optional Per page (1-100).'
example: 15
required: false
schema:
type: integer
description: 'optional Per page (1-100).'
example: 15
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Awarded projects retrieved successfully'
data:
data: []
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Awarded projects retrieved successfully'
data:
type: object
properties:
data:
type: array
example: []
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'User is not an expert.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'User is not an expert.'
tags:
- 'Admin Expert Projects'
parameters:
-
in: path
name: expert_id
description: 'The ID of the expert.'
example: 1
required: true
schema:
type: integer
-
in: path
name: expert
description: 'The expert (user) ID.'
example: 2
required: true
schema:
type: integer
'/api/v1/admin/experts/{expert_id}/completed-projects':
get:
summary: 'List all completed projects for an expert (awarded projects with status completed).'
operationId: listAllCompletedProjectsForAnExpertawardedProjectsWithStatusCompleted
description: ''
parameters:
-
in: query
name: per_page
description: 'optional Per page (1-100).'
example: 15
required: false
schema:
type: integer
description: 'optional Per page (1-100).'
example: 15
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Completed projects retrieved successfully'
data:
data: []
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Completed projects retrieved successfully'
data:
type: object
properties:
data:
type: array
example: []
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'User is not an expert.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'User is not an expert.'
tags:
- 'Admin Expert Projects'
parameters:
-
in: path
name: expert_id
description: 'The ID of the expert.'
example: 1
required: true
schema:
type: integer
-
in: path
name: expert
description: 'The expert (user) ID.'
example: 2
required: true
schema:
type: integer
/api/v1/admin/company-faqs:
get:
summary: 'Get all company FAQs.'
operationId: getAllCompanyFAQs
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Company FAQs retrieved'
data:
-
id: 1
heading: 'Question 1'
description: 'Answer 1'
order: 0
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Company FAQs retrieved'
data:
type: array
example:
-
id: 1
heading: 'Question 1'
description: 'Answer 1'
order: 0
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
items:
type: object
properties:
id:
type: integer
example: 1
heading:
type: string
example: 'Question 1'
description:
type: string
example: 'Answer 1'
order:
type: integer
example: 0
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
tags:
- 'Admin FAQ Management'
post:
summary: 'Create a new company FAQ.'
operationId: createANewCompanyFAQ
description: ''
parameters: []
responses:
201:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Company FAQ created'
data:
id: 1
heading: 'How do I get started?'
description: 'You can get started by creating an account.'
order: 0
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Company FAQ created'
data:
type: object
properties:
id:
type: integer
example: 1
heading:
type: string
example: 'How do I get started?'
description:
type: string
example: 'You can get started by creating an account.'
order:
type: integer
example: 0
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
heading:
- 'The heading field is required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
heading:
type: array
example:
- 'The heading field is required.'
items:
type: string
tags:
- 'Admin FAQ Management'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
heading:
type: string
description: 'The FAQ heading.'
example: 'How do I get started?'
description:
type: string
description: 'The FAQ description/answer.'
example: 'You can get started by creating an account.'
order:
type: integer
description: 'optional The display order.'
example: 0
nullable: true
required:
- heading
- description
'/api/v1/admin/company-faqs/{id}':
get:
summary: 'Get a single company FAQ.'
operationId: getASingleCompanyFAQ
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Company FAQ retrieved'
data:
id: 1
heading: 'Question 1'
description: 'Answer 1'
order: 0
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Company FAQ retrieved'
data:
type: object
properties:
id:
type: integer
example: 1
heading:
type: string
example: 'Question 1'
description:
type: string
example: 'Answer 1'
order:
type: integer
example: 0
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Company FAQ not found'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Company FAQ not found'
tags:
- 'Admin FAQ Management'
put:
summary: 'Update a company FAQ.'
operationId: updateACompanyFAQ
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Company FAQ updated'
data:
id: 1
heading: 'How do I get started?'
description: 'You can get started by creating an account.'
order: 0
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Company FAQ updated'
data:
type: object
properties:
id:
type: integer
example: 1
heading:
type: string
example: 'How do I get started?'
description:
type: string
example: 'You can get started by creating an account.'
order:
type: integer
example: 0
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Company FAQ not found'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Company FAQ not found'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
heading:
- 'The heading field is required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
heading:
type: array
example:
- 'The heading field is required.'
items:
type: string
tags:
- 'Admin FAQ Management'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
heading:
type: string
description: 'optional The FAQ heading.'
example: 'How do I get started?'
description:
type: string
description: 'optional The FAQ description/answer.'
example: 'You can get started by creating an account.'
order:
type: integer
description: 'optional The display order.'
example: 0
nullable: true
delete:
summary: 'Delete a company FAQ.'
operationId: deleteACompanyFAQ
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Company FAQ deleted'
data: null
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Company FAQ deleted'
data:
type: string
example: null
nullable: 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: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Company FAQ not found'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Company FAQ not found'
tags:
- 'Admin FAQ Management'
parameters:
-
in: path
name: id
description: 'The ID of the FAQ.'
example: 1
required: true
schema:
type: integer
/api/v1/admin/expert-faqs:
get:
summary: 'Get all expert FAQs.'
operationId: getAllExpertFAQs
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Expert FAQs retrieved'
data:
-
id: 1
heading: 'Question 1'
description: 'Answer 1'
order: 0
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Expert FAQs retrieved'
data:
type: array
example:
-
id: 1
heading: 'Question 1'
description: 'Answer 1'
order: 0
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
items:
type: object
properties:
id:
type: integer
example: 1
heading:
type: string
example: 'Question 1'
description:
type: string
example: 'Answer 1'
order:
type: integer
example: 0
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
tags:
- 'Admin FAQ Management'
post:
summary: 'Create a new expert FAQ.'
operationId: createANewExpertFAQ
description: ''
parameters: []
responses:
201:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Expert FAQ created'
data:
id: 1
heading: 'How do I get started?'
description: 'You can get started by creating an account.'
order: 0
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Expert FAQ created'
data:
type: object
properties:
id:
type: integer
example: 1
heading:
type: string
example: 'How do I get started?'
description:
type: string
example: 'You can get started by creating an account.'
order:
type: integer
example: 0
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
heading:
- 'The heading field is required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
heading:
type: array
example:
- 'The heading field is required.'
items:
type: string
tags:
- 'Admin FAQ Management'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
heading:
type: string
description: 'The FAQ heading.'
example: 'How do I get started?'
description:
type: string
description: 'The FAQ description/answer.'
example: 'You can get started by creating an account.'
order:
type: integer
description: 'optional The display order.'
example: 0
nullable: true
required:
- heading
- description
'/api/v1/admin/expert-faqs/{id}':
get:
summary: 'Get a single expert FAQ.'
operationId: getASingleExpertFAQ
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Expert FAQ retrieved'
data:
id: 1
heading: 'Question 1'
description: 'Answer 1'
order: 0
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Expert FAQ retrieved'
data:
type: object
properties:
id:
type: integer
example: 1
heading:
type: string
example: 'Question 1'
description:
type: string
example: 'Answer 1'
order:
type: integer
example: 0
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Expert FAQ not found'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Expert FAQ not found'
tags:
- 'Admin FAQ Management'
put:
summary: 'Update an expert FAQ.'
operationId: updateAnExpertFAQ
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Expert FAQ updated'
data:
id: 1
heading: 'How do I get started?'
description: 'You can get started by creating an account.'
order: 0
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Expert FAQ updated'
data:
type: object
properties:
id:
type: integer
example: 1
heading:
type: string
example: 'How do I get started?'
description:
type: string
example: 'You can get started by creating an account.'
order:
type: integer
example: 0
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Expert FAQ not found'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Expert FAQ not found'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
heading:
- 'The heading field is required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
heading:
type: array
example:
- 'The heading field is required.'
items:
type: string
tags:
- 'Admin FAQ Management'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
heading:
type: string
description: 'optional The FAQ heading.'
example: 'How do I get started?'
description:
type: string
description: 'optional The FAQ description/answer.'
example: 'You can get started by creating an account.'
order:
type: integer
description: 'optional The display order.'
example: 0
nullable: true
delete:
summary: 'Delete an expert FAQ.'
operationId: deleteAnExpertFAQ
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Expert FAQ deleted'
data: null
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Expert FAQ deleted'
data:
type: string
example: null
nullable: 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: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Expert FAQ not found'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Expert FAQ not found'
tags:
- 'Admin FAQ Management'
parameters:
-
in: path
name: id
description: 'The ID of the FAQ.'
example: 1
required: true
schema:
type: integer
/api/v1/admin/home-page:
get:
summary: 'Get current home page content.'
operationId: getCurrentHomePageContent
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Home page content retrieved successfully'
data:
id: 1
section1:
hero_headline: Welcome
hero_description: Description
hero_image: 'http://localhost/images/hero.jpg'
section2:
headline: 'Section 2'
section3:
headline: 'Section 3'
description: Description
button_name: Click
button_url: 'https://example.com'
image: 'http://localhost/images/section3.jpg'
section4:
headline: 'Section 4'
options:
-
image: 'http://localhost/images/option1.jpg'
title: 'Option 1'
description: 'Description 1'
section5:
steps:
-
title: 'Step 1'
description: 'Description 1'
section6:
headline: 'Section 6'
button_name: Click
button_url: 'https://example.com'
background_image: 'http://localhost/images/bg.jpg'
section7:
headline: 'Section 7'
description: Description
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Home page content retrieved successfully'
data:
type: object
properties:
id:
type: integer
example: 1
section1:
type: object
properties:
hero_headline:
type: string
example: Welcome
hero_description:
type: string
example: Description
hero_image:
type: string
example: 'http://localhost/images/hero.jpg'
section2:
type: object
properties:
headline:
type: string
example: 'Section 2'
section3:
type: object
properties:
headline:
type: string
example: 'Section 3'
description:
type: string
example: Description
button_name:
type: string
example: Click
button_url:
type: string
example: 'https://example.com'
image:
type: string
example: 'http://localhost/images/section3.jpg'
section4:
type: object
properties:
headline:
type: string
example: 'Section 4'
options:
type: array
example:
-
image: 'http://localhost/images/option1.jpg'
title: 'Option 1'
description: 'Description 1'
items:
type: object
properties:
image:
type: string
example: 'http://localhost/images/option1.jpg'
title:
type: string
example: 'Option 1'
description:
type: string
example: 'Description 1'
section5:
type: object
properties:
steps:
type: array
example:
-
title: 'Step 1'
description: 'Description 1'
items:
type: object
properties:
title:
type: string
example: 'Step 1'
description:
type: string
example: 'Description 1'
section6:
type: object
properties:
headline:
type: string
example: 'Section 6'
button_name:
type: string
example: Click
button_url:
type: string
example: 'https://example.com'
background_image:
type: string
example: 'http://localhost/images/bg.jpg'
section7:
type: object
properties:
headline:
type: string
example: 'Section 7'
description:
type: string
example: Description
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
tags:
- 'Admin Home Page'
put:
summary: 'Update home page content.'
operationId: updateHomePageContent
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Home page content updated successfully'
data:
id: 1
section1:
hero_headline: Welcome
hero_description: Description
hero_image: 'http://localhost/images/hero.jpg'
section2:
headline: 'Section 2'
section3:
headline: 'Section 3'
description: Description
button_name: Click
button_url: 'https://example.com'
image: 'http://localhost/images/section3.jpg'
section4:
headline: 'Section 4'
options:
-
image: 'http://localhost/images/option1.jpg'
title: 'Option 1'
description: 'Description 1'
section5:
steps:
-
title: 'Step 1'
description: 'Description 1'
section6:
headline: 'Section 6'
button_name: Click
button_url: 'https://example.com'
background_image: 'http://localhost/images/bg.jpg'
section7:
headline: 'Section 7'
description: Description
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Home page content updated successfully'
data:
type: object
properties:
id:
type: integer
example: 1
section1:
type: object
properties:
hero_headline:
type: string
example: Welcome
hero_description:
type: string
example: Description
hero_image:
type: string
example: 'http://localhost/images/hero.jpg'
section2:
type: object
properties:
headline:
type: string
example: 'Section 2'
section3:
type: object
properties:
headline:
type: string
example: 'Section 3'
description:
type: string
example: Description
button_name:
type: string
example: Click
button_url:
type: string
example: 'https://example.com'
image:
type: string
example: 'http://localhost/images/section3.jpg'
section4:
type: object
properties:
headline:
type: string
example: 'Section 4'
options:
type: array
example:
-
image: 'http://localhost/images/option1.jpg'
title: 'Option 1'
description: 'Description 1'
items:
type: object
properties:
image:
type: string
example: 'http://localhost/images/option1.jpg'
title:
type: string
example: 'Option 1'
description:
type: string
example: 'Description 1'
section5:
type: object
properties:
steps:
type: array
example:
-
title: 'Step 1'
description: 'Description 1'
items:
type: object
properties:
title:
type: string
example: 'Step 1'
description:
type: string
example: 'Description 1'
section6:
type: object
properties:
headline:
type: string
example: 'Section 6'
button_name:
type: string
example: Click
button_url:
type: string
example: 'https://example.com'
background_image:
type: string
example: 'http://localhost/images/bg.jpg'
section7:
type: object
properties:
headline:
type: string
example: 'Section 7'
description:
type: string
example: Description
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
hero_headline:
- 'The hero headline field is required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
hero_headline:
type: array
example:
- 'The hero headline field is required.'
items:
type: string
tags:
- 'Admin Home Page'
requestBody:
required: false
content:
multipart/form-data:
schema:
type: object
properties:
hero_headline:
type: string
description: 'optional Hero headline.'
example: 'Welcome to Our Platform'
nullable: true
hero_description:
type: string
description: 'optional Hero description.'
example: 'Connect with industry experts'
nullable: true
hero_image:
type: string
format: binary
description: 'optional Hero image (max 5MB, jpeg/png/jpg/gif/webp).'
nullable: true
section2_headline:
type: string
description: 'optional Section 2 headline.'
example: 'Our Services'
nullable: true
section3_headline:
type: string
description: 'optional Section 3 headline.'
example: 'Get Started'
nullable: true
section3_description:
type: string
description: 'optional Section 3 description.'
example: 'Join us today'
nullable: true
section3_button_name:
type: string
description: 'optional Section 3 button name.'
example: 'Sign Up'
nullable: true
section3_button_url:
type: string
description: 'optional Section 3 button URL.'
example: 'https://example.com/signup'
nullable: true
section3_image:
type: string
format: binary
description: 'optional Section 3 image (max 5MB, jpeg/png/jpg/gif/webp).'
nullable: true
section4_headline:
type: string
description: 'optional Section 4 headline.'
example: Features
nullable: true
section4_options:
type: array
description: 'optional Section 4 options array.'
example:
- architecto
items:
type: string
nullable: true
section4_image:
type: string
format: binary
description: 'optional Section 4 image (max 5MB, jpeg/png/jpg/gif/webp).'
nullable: true
section5_steps:
type: array
description: 'optional Section 5 steps array (must have exactly 5 steps).'
example:
- architecto
items:
type: string
nullable: true
section6_headline:
type: string
description: 'optional Section 6 headline.'
example: 'Ready to Start?'
nullable: true
section6_button_name:
type: string
description: 'optional Section 6 button name.'
example: 'Get Started'
nullable: true
section6_button_url:
type: string
description: 'optional Section 6 button URL.'
example: 'https://example.com/start'
nullable: true
section6_background_image:
type: string
format: binary
description: 'optional Section 6 background image (max 5MB, jpeg/png/jpg/gif/webp).'
nullable: true
section7_headline:
type: string
description: 'optional Section 7 headline.'
example: 'About Us'
nullable: true
section7_description:
type: string
description: 'optional Section 7 description.'
example: 'We are a leading platform'
nullable: true
patch:
summary: 'Update home page content.'
operationId: updateHomePageContent
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Home page content updated successfully'
data:
id: 1
section1:
hero_headline: Welcome
hero_description: Description
hero_image: 'http://localhost/images/hero.jpg'
section2:
headline: 'Section 2'
section3:
headline: 'Section 3'
description: Description
button_name: Click
button_url: 'https://example.com'
image: 'http://localhost/images/section3.jpg'
section4:
headline: 'Section 4'
options:
-
image: 'http://localhost/images/option1.jpg'
title: 'Option 1'
description: 'Description 1'
section5:
steps:
-
title: 'Step 1'
description: 'Description 1'
section6:
headline: 'Section 6'
button_name: Click
button_url: 'https://example.com'
background_image: 'http://localhost/images/bg.jpg'
section7:
headline: 'Section 7'
description: Description
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Home page content updated successfully'
data:
type: object
properties:
id:
type: integer
example: 1
section1:
type: object
properties:
hero_headline:
type: string
example: Welcome
hero_description:
type: string
example: Description
hero_image:
type: string
example: 'http://localhost/images/hero.jpg'
section2:
type: object
properties:
headline:
type: string
example: 'Section 2'
section3:
type: object
properties:
headline:
type: string
example: 'Section 3'
description:
type: string
example: Description
button_name:
type: string
example: Click
button_url:
type: string
example: 'https://example.com'
image:
type: string
example: 'http://localhost/images/section3.jpg'
section4:
type: object
properties:
headline:
type: string
example: 'Section 4'
options:
type: array
example:
-
image: 'http://localhost/images/option1.jpg'
title: 'Option 1'
description: 'Description 1'
items:
type: object
properties:
image:
type: string
example: 'http://localhost/images/option1.jpg'
title:
type: string
example: 'Option 1'
description:
type: string
example: 'Description 1'
section5:
type: object
properties:
steps:
type: array
example:
-
title: 'Step 1'
description: 'Description 1'
items:
type: object
properties:
title:
type: string
example: 'Step 1'
description:
type: string
example: 'Description 1'
section6:
type: object
properties:
headline:
type: string
example: 'Section 6'
button_name:
type: string
example: Click
button_url:
type: string
example: 'https://example.com'
background_image:
type: string
example: 'http://localhost/images/bg.jpg'
section7:
type: object
properties:
headline:
type: string
example: 'Section 7'
description:
type: string
example: Description
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
hero_headline:
- 'The hero headline field is required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
hero_headline:
type: array
example:
- 'The hero headline field is required.'
items:
type: string
tags:
- 'Admin Home Page'
requestBody:
required: false
content:
multipart/form-data:
schema:
type: object
properties:
hero_headline:
type: string
description: 'optional Hero headline.'
example: 'Welcome to Our Platform'
nullable: true
hero_description:
type: string
description: 'optional Hero description.'
example: 'Connect with industry experts'
nullable: true
hero_image:
type: string
format: binary
description: 'optional Hero image (max 5MB, jpeg/png/jpg/gif/webp).'
nullable: true
section2_headline:
type: string
description: 'optional Section 2 headline.'
example: 'Our Services'
nullable: true
section3_headline:
type: string
description: 'optional Section 3 headline.'
example: 'Get Started'
nullable: true
section3_description:
type: string
description: 'optional Section 3 description.'
example: 'Join us today'
nullable: true
section3_button_name:
type: string
description: 'optional Section 3 button name.'
example: 'Sign Up'
nullable: true
section3_button_url:
type: string
description: 'optional Section 3 button URL.'
example: 'https://example.com/signup'
nullable: true
section3_image:
type: string
format: binary
description: 'optional Section 3 image (max 5MB, jpeg/png/jpg/gif/webp).'
nullable: true
section4_headline:
type: string
description: 'optional Section 4 headline.'
example: Features
nullable: true
section4_options:
type: array
description: 'optional Section 4 options array.'
example:
- architecto
items:
type: string
nullable: true
section4_image:
type: string
format: binary
description: 'optional Section 4 image (max 5MB, jpeg/png/jpg/gif/webp).'
nullable: true
section5_steps:
type: array
description: 'optional Section 5 steps array (must have exactly 5 steps).'
example:
- architecto
items:
type: string
nullable: true
section6_headline:
type: string
description: 'optional Section 6 headline.'
example: 'Ready to Start?'
nullable: true
section6_button_name:
type: string
description: 'optional Section 6 button name.'
example: 'Get Started'
nullable: true
section6_button_url:
type: string
description: 'optional Section 6 button URL.'
example: 'https://example.com/start'
nullable: true
section6_background_image:
type: string
format: binary
description: 'optional Section 6 background image (max 5MB, jpeg/png/jpg/gif/webp).'
nullable: true
section7_headline:
type: string
description: 'optional Section 7 headline.'
example: 'About Us'
nullable: true
section7_description:
type: string
description: 'optional Section 7 description.'
example: 'We are a leading platform'
nullable: true
/api/v1/admin/milestone-payments:
get:
summary: 'List all milestone payments (paid by companies) with optional filters.'
operationId: listAllMilestonePaymentspaidByCompaniesWithOptionalFilters
description: ''
parameters:
-
in: query
name: project_id
description: 'optional Filter by project ID.'
example: 1
required: false
schema:
type: integer
description: 'optional Filter by project ID.'
example: 1
-
in: query
name: company_id
description: 'optional Filter by company (project owner) user ID.'
example: 1
required: false
schema:
type: integer
description: 'optional Filter by company (project owner) user ID.'
example: 1
-
in: query
name: per_page
description: 'optional Per page (1-100).'
example: 15
required: false
schema:
type: integer
description: 'optional Per page (1-100).'
example: 15
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Milestone payments retrieved successfully'
data:
data: []
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Milestone payments retrieved successfully'
data:
type: object
properties:
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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
tags:
- 'Admin Milestone Payments'
/api/v1/admin/policies/privacy-policy:
get:
summary: 'Get privacy policy.'
operationId: getPrivacyPolicy
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Privacy policy retrieved successfully'
data:
id: 1
type: privacy_policy
content: 'Privacy policy content here...'
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Privacy policy retrieved successfully'
data:
type: object
properties:
id:
type: integer
example: 1
type:
type: string
example: privacy_policy
content:
type: string
example: 'Privacy policy content here...'
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
tags:
- 'Admin Policies'
put:
summary: 'Update privacy policy.'
operationId: updatePrivacyPolicy
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Privacy policy updated successfully'
data:
id: 1
type: privacy_policy
content: 'Updated privacy policy content...'
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Privacy policy updated successfully'
data:
type: object
properties:
id:
type: integer
example: 1
type:
type: string
example: privacy_policy
content:
type: string
example: 'Updated privacy policy content...'
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
content:
- 'The content field is required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
content:
type: array
example:
- 'The content field is required.'
items:
type: string
tags:
- 'Admin Policies'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
content:
type: string
description: 'The privacy policy content.'
example: 'This is the privacy policy content...'
required:
- content
patch:
summary: 'Update privacy policy.'
operationId: updatePrivacyPolicy
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Privacy policy updated successfully'
data:
id: 1
type: privacy_policy
content: 'Updated privacy policy content...'
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Privacy policy updated successfully'
data:
type: object
properties:
id:
type: integer
example: 1
type:
type: string
example: privacy_policy
content:
type: string
example: 'Updated privacy policy content...'
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
content:
- 'The content field is required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
content:
type: array
example:
- 'The content field is required.'
items:
type: string
tags:
- 'Admin Policies'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
content:
type: string
description: 'The privacy policy content.'
example: 'This is the privacy policy content...'
required:
- content
/api/v1/admin/policies/terms-conditions:
get:
summary: 'Get terms & conditions.'
operationId: getTermsConditions
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Terms & conditions retrieved successfully'
data:
id: 2
type: terms_conditions
content: 'Terms & conditions content here...'
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Terms & conditions retrieved successfully'
data:
type: object
properties:
id:
type: integer
example: 2
type:
type: string
example: terms_conditions
content:
type: string
example: 'Terms & conditions content here...'
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
tags:
- 'Admin Policies'
put:
summary: 'Update terms & conditions.'
operationId: updateTermsConditions
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Terms & conditions updated successfully'
data:
id: 2
type: terms_conditions
content: 'Updated terms & conditions content...'
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Terms & conditions updated successfully'
data:
type: object
properties:
id:
type: integer
example: 2
type:
type: string
example: terms_conditions
content:
type: string
example: 'Updated terms & conditions content...'
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
content:
- 'The content field is required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
content:
type: array
example:
- 'The content field is required.'
items:
type: string
tags:
- 'Admin Policies'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
content:
type: string
description: 'The terms & conditions content.'
example: 'This is the terms & conditions content...'
required:
- content
patch:
summary: 'Update terms & conditions.'
operationId: updateTermsConditions
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Terms & conditions updated successfully'
data:
id: 2
type: terms_conditions
content: 'Updated terms & conditions content...'
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Terms & conditions updated successfully'
data:
type: object
properties:
id:
type: integer
example: 2
type:
type: string
example: terms_conditions
content:
type: string
example: 'Updated terms & conditions content...'
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
content:
- 'The content field is required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
content:
type: array
example:
- 'The content field is required.'
items:
type: string
tags:
- 'Admin Policies'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
content:
type: string
description: 'The terms & conditions content.'
example: 'This is the terms & conditions content...'
required:
- content
/api/v1/admin/policies/refund-cancellation:
get:
summary: 'Get refund & cancellation policy.'
operationId: getRefundCancellationPolicy
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Refund & cancellation policy retrieved successfully'
data:
id: 3
type: refund_cancellation
content: 'Refund & cancellation policy content here...'
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Refund & cancellation policy retrieved successfully'
data:
type: object
properties:
id:
type: integer
example: 3
type:
type: string
example: refund_cancellation
content:
type: string
example: 'Refund & cancellation policy content here...'
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
tags:
- 'Admin Policies'
put:
summary: 'Update refund & cancellation policy.'
operationId: updateRefundCancellationPolicy
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Refund & cancellation policy updated successfully'
data:
id: 3
type: refund_cancellation
content: 'Updated refund & cancellation policy content...'
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Refund & cancellation policy updated successfully'
data:
type: object
properties:
id:
type: integer
example: 3
type:
type: string
example: refund_cancellation
content:
type: string
example: 'Updated refund & cancellation policy content...'
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
content:
- 'The content field is required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
content:
type: array
example:
- 'The content field is required.'
items:
type: string
tags:
- 'Admin Policies'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
content:
type: string
description: 'The refund & cancellation policy content.'
example: 'This is the refund & cancellation policy content...'
required:
- content
patch:
summary: 'Update refund & cancellation policy.'
operationId: updateRefundCancellationPolicy
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Refund & cancellation policy updated successfully'
data:
id: 3
type: refund_cancellation
content: 'Updated refund & cancellation policy content...'
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Refund & cancellation policy updated successfully'
data:
type: object
properties:
id:
type: integer
example: 3
type:
type: string
example: refund_cancellation
content:
type: string
example: 'Updated refund & cancellation policy content...'
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
content:
- 'The content field is required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
content:
type: array
example:
- 'The content field is required.'
items:
type: string
tags:
- 'Admin Policies'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
content:
type: string
description: 'The refund & cancellation policy content.'
example: 'This is the refund & cancellation policy content...'
required:
- content
/api/v1/admin/projects:
get:
summary: 'List all projects for admin (optionally filter by company_id).'
operationId: listAllProjectsForAdminoptionallyFilterByCompanyId
description: ''
parameters:
-
in: query
name: company_id
description: 'optional Filter by company (user) ID.'
example: 1
required: false
schema:
type: integer
description: 'optional Filter by company (user) ID.'
example: 1
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Projects retrieved successfully'
data:
data: []
meta: { }
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Projects retrieved successfully'
data:
type: object
properties:
data:
type: array
example: []
meta:
type: object
properties: { }
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: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
tags:
- 'Admin Projects'
'/api/v1/admin/projects/{project_id}':
get:
summary: 'Get full project details for admin: project, company, all proposals, milestones with payment status.'
operationId: getFullProjectDetailsForAdminProjectCompanyAllProposalsMilestonesWithPaymentStatus
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Project details retrieved successfully'
data:
project: { }
company: { }
proposals: []
milestones: []
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Project details retrieved successfully'
data:
type: object
properties:
project:
type: object
properties: { }
company:
type: object
properties: { }
proposals:
type: array
example: []
milestones:
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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Project not found.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Project not found.'
tags:
- 'Admin Projects'
parameters:
-
in: path
name: project_id
description: 'The ID of the project.'
example: 16
required: true
schema:
type: integer
/api/v1/admin/site-settings:
get:
summary: 'Get current site settings.'
operationId: getCurrentSiteSettings
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Site settings retrieved successfully'
data:
id: 1
favicon: 'http://localhost/favicon.ico'
logo: 'http://localhost/logos/logo.png'
footer_logo: 'http://localhost/logos/footer-logo.png'
footer_description: 'Company description'
address: '123 Main St'
email: info@example.com
phone: '1234567890'
phone_country_code: '+1'
facebook_url: 'https://facebook.com/company'
instagram_url: 'https://instagram.com/company'
linkedin_url: 'https://linkedin.com/company'
copyright: '© 2024 Company'
header_image: 'http://localhost/images/header.jpg'
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00: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/favicon.ico'
logo:
type: string
example: 'http://localhost/logos/logo.png'
footer_logo:
type: string
example: 'http://localhost/logos/footer-logo.png'
footer_description:
type: string
example: 'Company description'
address:
type: string
example: '123 Main St'
email:
type: string
example: info@example.com
phone:
type: string
example: '1234567890'
phone_country_code:
type: string
example: '+1'
facebook_url:
type: string
example: 'https://facebook.com/company'
instagram_url:
type: string
example: 'https://instagram.com/company'
linkedin_url:
type: string
example: 'https://linkedin.com/company'
copyright:
type: string
example: '© 2024 Company'
header_image:
type: string
example: 'http://localhost/images/header.jpg'
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
tags:
- 'Admin Site Settings'
put:
summary: 'Update site settings.'
operationId: updateSiteSettings
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Site settings updated successfully'
data:
id: 1
favicon: 'http://localhost/favicon.ico'
logo: 'http://localhost/logos/logo.png'
footer_logo: 'http://localhost/logos/footer-logo.png'
footer_description: 'Company description'
address: '123 Main St'
email: info@example.com
phone: '1234567890'
phone_country_code: '+1'
facebook_url: 'https://facebook.com/company'
instagram_url: 'https://instagram.com/company'
linkedin_url: 'https://linkedin.com/company'
copyright: '© 2024 Company'
header_image: 'http://localhost/images/header.jpg'
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Site settings updated successfully'
data:
type: object
properties:
id:
type: integer
example: 1
favicon:
type: string
example: 'http://localhost/favicon.ico'
logo:
type: string
example: 'http://localhost/logos/logo.png'
footer_logo:
type: string
example: 'http://localhost/logos/footer-logo.png'
footer_description:
type: string
example: 'Company description'
address:
type: string
example: '123 Main St'
email:
type: string
example: info@example.com
phone:
type: string
example: '1234567890'
phone_country_code:
type: string
example: '+1'
facebook_url:
type: string
example: 'https://facebook.com/company'
instagram_url:
type: string
example: 'https://instagram.com/company'
linkedin_url:
type: string
example: 'https://linkedin.com/company'
copyright:
type: string
example: '© 2024 Company'
header_image:
type: string
example: 'http://localhost/images/header.jpg'
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
email:
- 'The email must be a valid email address.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
email:
type: array
example:
- 'The email must be a valid email address.'
items:
type: string
tags:
- 'Admin Site Settings'
requestBody:
required: false
content:
multipart/form-data:
schema:
type: object
properties:
favicon:
type: string
format: binary
description: 'optional Favicon file (max 2MB, ico/png/jpg/jpeg).'
nullable: true
logo:
type: string
format: binary
description: 'optional Logo file (max 2MB, jpeg/png/jpg/gif).'
nullable: true
footer_logo:
type: string
format: binary
description: 'optional Footer logo file (max 2MB, jpeg/png/jpg/gif).'
nullable: true
footer_description:
type: string
description: 'optional Footer description.'
example: 'Company description'
nullable: true
address:
type: string
description: 'optional Address.'
example: '123 Main St, City, State'
nullable: true
email:
type: string
description: 'optional Email address.'
example: info@example.com
nullable: true
phone:
type: string
description: 'optional Phone number.'
example: '1234567890'
nullable: true
phone_country_code:
type: string
description: 'optional Phone country code.'
example: '+1'
nullable: true
facebook_url:
type: string
description: 'optional Facebook URL.'
example: 'https://facebook.com/company'
nullable: true
instagram_url:
type: string
description: 'optional Instagram URL.'
example: 'https://instagram.com/company'
nullable: true
linkedin_url:
type: string
description: 'optional LinkedIn URL.'
example: 'https://linkedin.com/company'
nullable: true
copyright:
type: string
description: 'optional Copyright text.'
example: '© 2024 Company'
nullable: true
header_image:
type: string
format: binary
description: 'optional Header image file (max 2MB, jpeg/png/jpg/gif).'
nullable: true
patch:
summary: 'Update site settings.'
operationId: updateSiteSettings
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Site settings updated successfully'
data:
id: 1
favicon: 'http://localhost/favicon.ico'
logo: 'http://localhost/logos/logo.png'
footer_logo: 'http://localhost/logos/footer-logo.png'
footer_description: 'Company description'
address: '123 Main St'
email: info@example.com
phone: '1234567890'
phone_country_code: '+1'
facebook_url: 'https://facebook.com/company'
instagram_url: 'https://instagram.com/company'
linkedin_url: 'https://linkedin.com/company'
copyright: '© 2024 Company'
header_image: 'http://localhost/images/header.jpg'
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Site settings updated successfully'
data:
type: object
properties:
id:
type: integer
example: 1
favicon:
type: string
example: 'http://localhost/favicon.ico'
logo:
type: string
example: 'http://localhost/logos/logo.png'
footer_logo:
type: string
example: 'http://localhost/logos/footer-logo.png'
footer_description:
type: string
example: 'Company description'
address:
type: string
example: '123 Main St'
email:
type: string
example: info@example.com
phone:
type: string
example: '1234567890'
phone_country_code:
type: string
example: '+1'
facebook_url:
type: string
example: 'https://facebook.com/company'
instagram_url:
type: string
example: 'https://instagram.com/company'
linkedin_url:
type: string
example: 'https://linkedin.com/company'
copyright:
type: string
example: '© 2024 Company'
header_image:
type: string
example: 'http://localhost/images/header.jpg'
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
email:
- 'The email must be a valid email address.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
email:
type: array
example:
- 'The email must be a valid email address.'
items:
type: string
tags:
- 'Admin Site Settings'
requestBody:
required: false
content:
multipart/form-data:
schema:
type: object
properties:
favicon:
type: string
format: binary
description: 'optional Favicon file (max 2MB, ico/png/jpg/jpeg).'
nullable: true
logo:
type: string
format: binary
description: 'optional Logo file (max 2MB, jpeg/png/jpg/gif).'
nullable: true
footer_logo:
type: string
format: binary
description: 'optional Footer logo file (max 2MB, jpeg/png/jpg/gif).'
nullable: true
footer_description:
type: string
description: 'optional Footer description.'
example: 'Company description'
nullable: true
address:
type: string
description: 'optional Address.'
example: '123 Main St, City, State'
nullable: true
email:
type: string
description: 'optional Email address.'
example: info@example.com
nullable: true
phone:
type: string
description: 'optional Phone number.'
example: '1234567890'
nullable: true
phone_country_code:
type: string
description: 'optional Phone country code.'
example: '+1'
nullable: true
facebook_url:
type: string
description: 'optional Facebook URL.'
example: 'https://facebook.com/company'
nullable: true
instagram_url:
type: string
description: 'optional Instagram URL.'
example: 'https://instagram.com/company'
nullable: true
linkedin_url:
type: string
description: 'optional LinkedIn URL.'
example: 'https://linkedin.com/company'
nullable: true
copyright:
type: string
description: 'optional Copyright text.'
example: '© 2024 Company'
nullable: true
header_image:
type: string
format: binary
description: 'optional Header image file (max 2MB, jpeg/png/jpg/gif).'
nullable: true
/api/v1/admin/subscription-config:
get:
summary: 'Get subscription configuration(s).'
operationId: getSubscriptionConfigurations
description: ''
parameters:
-
in: query
name: role
description: 'optional The role to get configuration for (company or expert). If not provided, returns all configurations.'
example: architecto
required: false
schema:
type: string
description: 'optional The role to get configuration for (company or expert). If not provided, returns all configurations.'
example: architecto
responses:
200:
description: ''
content:
application/json:
schema:
oneOf:
-
description: ''
type: object
example:
success: true
message: 'Subscription configuration retrieved'
data:
role: company
price: 9999
currency: INR
validity_type: lifetime
validity_value: null
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Subscription configuration retrieved'
data:
type: object
properties:
role:
type: string
example: company
price:
type: integer
example: 9999
currency:
type: string
example: INR
validity_type:
type: string
example: lifetime
validity_value:
type: string
example: null
nullable: true
-
description: ''
type: object
example:
success: true
message: 'Subscription configurations retrieved'
data:
-
role: company
price: 9999
currency: INR
validity_type: lifetime
validity_value: null
-
role: expert
price: 4999
currency: INR
validity_type: lifetime
validity_value: null
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Subscription configurations retrieved'
data:
type: array
example:
-
role: company
price: 9999
currency: INR
validity_type: lifetime
validity_value: null
-
role: expert
price: 4999
currency: INR
validity_type: lifetime
validity_value: null
items:
type: object
properties:
role:
type: string
example: company
price:
type: integer
example: 9999
currency:
type: string
example: INR
validity_type:
type: string
example: lifetime
validity_value:
type: string
example: null
nullable: true
-
description: ''
type: object
example:
success: true
message: 'No subscription configuration found'
data: null
properties:
success:
type: boolean
example: true
message:
type: string
example: 'No subscription configuration found'
data:
type: string
example: null
nullable: 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: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
tags:
- 'Admin Subscription Configuration'
post:
summary: 'Create or update subscription configuration.'
operationId: createOrUpdateSubscriptionConfiguration
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
oneOf:
-
description: ''
type: object
example:
success: true
message: 'Subscription configuration saved'
data:
role: company
price: 9999
currency: INR
validity_type: lifetime
validity_value: null
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Subscription configuration saved'
data:
type: object
properties:
role:
type: string
example: company
price:
type: integer
example: 9999
currency:
type: string
example: INR
validity_type:
type: string
example: lifetime
validity_value:
type: string
example: null
nullable: true
-
description: ''
type: object
example:
success: true
message: 'Subscription configuration saved'
data:
role: expert
price: 5000
currency: INR
validity_type: months
validity_value: 12
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Subscription configuration saved'
data:
type: object
properties:
role:
type: string
example: expert
price:
type: integer
example: 5000
currency:
type: string
example: INR
validity_type:
type: string
example: months
validity_value:
type: integer
example: 12
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: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
price:
- 'The price field is required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
price:
type: array
example:
- 'The price field is required.'
items:
type: string
tags:
- 'Admin Subscription Configuration'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
role:
type: string
description: 'The role for this subscription plan (company or expert).'
example: company
price:
type: number
description: 'The subscription price.'
example: 9999.0
currency:
type: string
description: 'The currency code (e.g., INR, USD).'
example: INR
validity_type:
type: string
description: 'The validity type: lifetime, days, months, or years.'
example: lifetime
validity_value:
type: integer
description: 'nullable The validity value (required if validity_type is not lifetime).'
example: null
nullable: true
required:
- role
- price
- currency
- validity_type
/api/v1/admin/companies:
get:
summary: 'Get list of all registered companies with subscription status and profile data.'
operationId: getListOfAllRegisteredCompaniesWithSubscriptionStatusAndProfileData
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Companies retrieved successfully'
data:
-
id: 1
name: 'Company Name'
company_name: 'Company Name'
email: company@example.com
email_verified_at: '2024-01-01T00:00:00+00:00'
has_subscription: true
subscription:
id: 1
status: active
lifetime: true
starts_at: '2024-01-01T00:00:00+00:00'
ends_at: null
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
profile:
id: 1
user_id: 1
company_name: 'Company Name'
email: company@example.com
address_line_1: '123 Main St'
country_id: 1
state_id: 1
city_id: 1
zip_postal_code: '12345'
phone: '1234567890'
company_logo: 'http://localhost/logos/image.jpg'
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Companies retrieved successfully'
data:
type: array
example:
-
id: 1
name: 'Company Name'
company_name: 'Company Name'
email: company@example.com
email_verified_at: '2024-01-01T00:00:00+00:00'
has_subscription: true
subscription:
id: 1
status: active
lifetime: true
starts_at: '2024-01-01T00:00:00+00:00'
ends_at: null
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
profile:
id: 1
user_id: 1
company_name: 'Company Name'
email: company@example.com
address_line_1: '123 Main St'
country_id: 1
state_id: 1
city_id: 1
zip_postal_code: '12345'
phone: '1234567890'
company_logo: 'http://localhost/logos/image.jpg'
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
items:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'Company Name'
company_name:
type: string
example: 'Company Name'
email:
type: string
example: company@example.com
email_verified_at:
type: string
example: '2024-01-01T00:00:00+00:00'
has_subscription:
type: boolean
example: true
subscription:
type: object
properties:
id:
type: integer
example: 1
status:
type: string
example: active
lifetime:
type: boolean
example: true
starts_at:
type: string
example: '2024-01-01T00:00:00+00:00'
ends_at:
type: string
example: null
nullable: true
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+00:00'
profile:
type: object
properties:
id:
type: integer
example: 1
user_id:
type: integer
example: 1
company_name:
type: string
example: 'Company Name'
email:
type: string
example: company@example.com
address_line_1:
type: string
example: '123 Main St'
country_id:
type: integer
example: 1
state_id:
type: integer
example: 1
city_id:
type: integer
example: 1
zip_postal_code:
type: string
example: '12345'
phone:
type: string
example: '1234567890'
company_logo:
type: string
example: 'http://localhost/logos/image.jpg'
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+00:00'
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
tags:
- 'Admin User Management'
/api/v1/admin/experts:
get:
summary: 'Get list of all registered experts with subscription status, payment details, and profile data.'
operationId: getListOfAllRegisteredExpertsWithSubscriptionStatusPaymentDetailsAndProfileData
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Experts retrieved successfully'
data:
-
id: 2
name: 'John Doe'
first_name: John
last_name: Doe
email: expert@example.com
email_verified_at: '2024-01-01T00:00:00+00:00'
has_subscription: false
subscription: null
payment_details:
id: 1
user_id: 2
payment_method: paypal
paypal_email: expert@example.com
country: null
state: null
city: null
zip_postal_code: null
address: null
bank_name: null
swift_code_or_ifsc: null
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
profile:
id: 1
user_id: 2
first_name: John
last_name: Doe
email: expert@example.com
designation_id: 1
experience: 5
bio: 'Expert in software development'
phone: '1234567890'
address_line_1: '123 Main St'
country_id: 1
state_id: 1
city_id: 1
zip_postal_code: '12345'
profile_image: 'http://localhost/profiles/image.jpg'
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Experts retrieved successfully'
data:
type: array
example:
-
id: 2
name: 'John Doe'
first_name: John
last_name: Doe
email: expert@example.com
email_verified_at: '2024-01-01T00:00:00+00:00'
has_subscription: false
subscription: null
payment_details:
id: 1
user_id: 2
payment_method: paypal
paypal_email: expert@example.com
country: null
state: null
city: null
zip_postal_code: null
address: null
bank_name: null
swift_code_or_ifsc: null
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
profile:
id: 1
user_id: 2
first_name: John
last_name: Doe
email: expert@example.com
designation_id: 1
experience: 5
bio: 'Expert in software development'
phone: '1234567890'
address_line_1: '123 Main St'
country_id: 1
state_id: 1
city_id: 1
zip_postal_code: '12345'
profile_image: 'http://localhost/profiles/image.jpg'
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
items:
type: object
properties:
id:
type: integer
example: 2
name:
type: string
example: 'John Doe'
first_name:
type: string
example: John
last_name:
type: string
example: Doe
email:
type: string
example: expert@example.com
email_verified_at:
type: string
example: '2024-01-01T00:00:00+00:00'
has_subscription:
type: boolean
example: false
subscription:
type: string
example: null
nullable: true
payment_details:
type: object
properties:
id:
type: integer
example: 1
user_id:
type: integer
example: 2
payment_method:
type: string
example: paypal
paypal_email:
type: string
example: expert@example.com
country:
type: string
example: null
nullable: true
state:
type: string
example: null
nullable: true
city:
type: string
example: null
nullable: true
zip_postal_code:
type: string
example: null
nullable: true
address:
type: string
example: null
nullable: true
bank_name:
type: string
example: null
nullable: true
swift_code_or_ifsc:
type: string
example: null
nullable: true
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+00:00'
profile:
type: object
properties:
id:
type: integer
example: 1
user_id:
type: integer
example: 2
first_name:
type: string
example: John
last_name:
type: string
example: Doe
email:
type: string
example: expert@example.com
designation_id:
type: integer
example: 1
experience:
type: integer
example: 5
bio:
type: string
example: 'Expert in software development'
phone:
type: string
example: '1234567890'
address_line_1:
type: string
example: '123 Main St'
country_id:
type: integer
example: 1
state_id:
type: integer
example: 1
city_id:
type: integer
example: 1
zip_postal_code:
type: string
example: '12345'
profile_image:
type: string
example: 'http://localhost/profiles/image.jpg'
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+00:00'
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
tags:
- 'Admin User Management'
/api/v1/auth/register:
post:
summary: 'Register a new user (expert or company).'
operationId: registerANewUserexpertOrCompany
description: ''
parameters: []
responses:
201:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Registration successful. Please verify your email.'
data: []
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Registration successful. Please verify your email.'
data:
type: array
example: []
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
email:
- 'The email has already been taken.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
email:
type: array
example:
- 'The email has already been taken.'
items:
type: string
tags:
- Authentication
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
user_type:
type: string
description: 'The type of user. Must be either "expert" or "company".'
example: expert
email:
type: string
description: "The user's email address. Must be unique."
example: john.doe@example.com
password:
type: string
description: "The user's password. Must be at least 8 characters."
example: password123
confirm_password:
type: string
description: 'Password confirmation. Must match password.'
example: password123
agree_terms:
type: boolean
description: 'Whether the user agrees to the terms. Must be true.'
example: true
first_name:
type: string
description: 'required_if:user_type,expert First name (required for experts).'
example: John
last_name:
type: string
description: 'required_if:user_type,expert Last name (required for experts).'
example: Doe
company_name:
type: string
description: 'required_if:user_type,company Company name (required for companies).'
example: 'Acme Corp'
required:
- user_type
- email
- password
- confirm_password
- agree_terms
security: []
/api/v1/auth/login:
post:
summary: 'Login user (expert or company).'
operationId: loginUserexpertOrCompany
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Login successful'
data:
token: 1|abcdefghijklmnopqrstuvwxyz1234567890
user:
id: 1
name: 'John Doe'
first_name: John
last_name: Doe
email: john.doe@example.com
email_verified_at: '2024-01-01T00:00:00+00:00'
roles:
- expert
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
role: expert
subscription:
id: 1
status: active
lifetime: true
starts_at: '2024-01-01T00:00:00+00:00'
ends_at: null
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Login successful'
data:
type: object
properties:
token:
type: string
example: 1|abcdefghijklmnopqrstuvwxyz1234567890
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: '2024-01-01T00:00:00+00:00'
roles:
type: array
example:
- expert
items:
type: string
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+00:00'
role:
type: string
example: expert
subscription:
type: object
properties:
id:
type: integer
example: 1
status:
type: string
example: active
lifetime:
type: boolean
example: true
starts_at:
type: string
example: '2024-01-01T00:00:00+00:00'
ends_at:
type: string
example: null
nullable: true
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+00:00'
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Invalid credentials'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Invalid credentials'
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Admin users cannot login through this endpoint. Please use the admin login.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Admin users cannot login through this endpoint. Please use the admin login.'
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:
- Authentication
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
email:
type: string
description: "The user's email address."
example: john.doe@example.com
password:
type: string
description: "The user's password."
example: password123
user_type:
type: string
description: 'optional The type of user. Must be either "expert" or "company". If not provided, will be auto-detected from user''s role.'
example: expert
nullable: true
required:
- email
- password
security: []
/api/v1/auth/forgot-password:
post:
summary: 'Send password reset link.'
operationId: sendPasswordResetLink
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Password reset link sent to your email.'
data: []
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Password reset link sent to your email.'
data:
type: array
example: []
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:
- Authentication
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
email:
type: string
description: "The user's email address."
example: john.doe@example.com
required:
- email
security: []
/api/v1/auth/reset-password:
post:
summary: 'Reset password.'
operationId: resetPassword
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Password reset successful.'
data: []
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Password reset successful.'
data:
type: array
example: []
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
token:
- 'The token field is required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
token:
type: array
example:
- 'The token field is required.'
items:
type: string
tags:
- Authentication
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
token:
type: string
description: 'The password reset token received via email.'
example: abc123def456ghi789
email:
type: string
description: "The user'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/verify-email/{id}/{hash}':
get:
summary: 'Verify email.'
operationId: verifyEmail
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'User email verified successfully.'
data: []
properties:
success:
type: boolean
example: true
message:
type: string
example: 'User email verified successfully.'
data:
type: array
example: []
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Invalid verification link'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Invalid verification link'
tags:
- Authentication
security: []
parameters:
-
in: path
name: id
description: 'The user ID.'
example: 1
required: true
schema:
type: integer
-
in: path
name: hash
description: 'The email verification hash.'
example: abc123def456ghi789
required: true
schema:
type: string
/api/v1/auth/logout:
post:
summary: 'Logout user.'
operationId: logoutUser
description: ''
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:
- Authentication
/api/v1/auth/change-password:
post:
summary: 'Change password for authenticated user.'
operationId: changePasswordForAuthenticatedUser
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Password changed successfully.'
data: []
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Password changed 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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Only expert and company users can change their password.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Only expert and company users can change their password.'
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:
- Authentication
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
current_password:
type: string
description: "The user'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/resend-verification:
get:
summary: 'Resend email verification notification.'
operationId: resendEmailVerificationNotification
description: ''
parameters:
-
in: query
name: email
description: "The user's email address."
example: john.doe@example.com
required: true
schema:
type: string
description: "The user's email address."
example: john.doe@example.com
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Verification email sent successfully.'
data: []
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Verification email sent successfully.'
data:
type: array
example: []
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:
- Authentication
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
email:
type: string
description: 'Must be a valid email address. The email of an existing record in the users table.'
example: gbailey@example.net
required:
- email
security: []
/api/v1/admin/auth/login:
post:
summary: 'Login admin user.'
operationId: loginAdminUser
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Login successful'
data:
token: 1|abcdefghijklmnopqrstuvwxyz1234567890
user:
id: 1
name: 'Admin User'
first_name: Admin
last_name: User
email: admin@example.com
email_verified_at: '2024-01-01T00:00:00+00:00'
roles:
- admin
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
role: admin
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Login successful'
data:
type: object
properties:
token:
type: string
example: 1|abcdefghijklmnopqrstuvwxyz1234567890
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@example.com
email_verified_at:
type: string
example: '2024-01-01T00:00:00+00:00'
roles:
type: array
example:
- admin
items:
type: string
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+00:00'
role:
type: string
example: admin
401:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Invalid credentials'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Invalid credentials'
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:
- Authentication
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
email:
type: string
description: "The admin's email address."
example: admin@example.com
password:
type: string
description: "The admin's password."
example: adminpassword123
required:
- email
- password
security: []
/api/v1/admin/auth/logout:
post:
summary: 'Logout admin user.'
operationId: logoutAdminUser
description: ''
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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
tags:
- Authentication
/api/v1/company/profile:
get:
summary: "Get the current company's profile."
operationId: getTheCurrentCompanysProfile
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Profile retrieved successfully'
data:
id: 1
user_id: 1
company_name: 'Acme Corp'
email: company@example.com
address_line_1: '123 Main St'
country_id: 1
state_id: 1
city_id: 1
zip_postal_code: '12345'
phone: '1234567890'
company_logo: 'http://localhost/storage/logos/image.jpg'
created_at: '2026-01-15T10:00:00+00:00'
updated_at: '2026-01-15T10:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Profile retrieved successfully'
data:
type: object
properties:
id:
type: integer
example: 1
user_id:
type: integer
example: 1
company_name:
type: string
example: 'Acme Corp'
email:
type: string
example: company@example.com
address_line_1:
type: string
example: '123 Main St'
country_id:
type: integer
example: 1
state_id:
type: integer
example: 1
city_id:
type: integer
example: 1
zip_postal_code:
type: string
example: '12345'
phone:
type: string
example: '1234567890'
company_logo:
type: string
example: 'http://localhost/storage/logos/image.jpg'
created_at:
type: string
example: '2026-01-15T10:00:00+00:00'
updated_at:
type: string
example: '2026-01-15T10:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Only companies can access this endpoint.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Only companies can access this endpoint.'
tags:
- 'Company Profile'
put:
summary: "Update or create the company's profile."
operationId: updateOrCreateTheCompanysProfile
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Profile updated successfully'
data:
id: 1
user_id: 1
company_name: 'Acme Corp'
email: company@example.com
address_line_1: '123 Main St'
country_id: 1
state_id: 1
city_id: 1
zip_postal_code: '12345'
phone: '1234567890'
company_logo: 'http://localhost/storage/logos/image.jpg'
created_at: '2026-01-15T10:00:00+00:00'
updated_at: '2026-01-15T10:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Profile updated successfully'
data:
type: object
properties:
id:
type: integer
example: 1
user_id:
type: integer
example: 1
company_name:
type: string
example: 'Acme Corp'
email:
type: string
example: company@example.com
address_line_1:
type: string
example: '123 Main St'
country_id:
type: integer
example: 1
state_id:
type: integer
example: 1
city_id:
type: integer
example: 1
zip_postal_code:
type: string
example: '12345'
phone:
type: string
example: '1234567890'
company_logo:
type: string
example: 'http://localhost/storage/logos/image.jpg'
created_at:
type: string
example: '2026-01-15T10:00:00+00:00'
updated_at:
type: string
example: '2026-01-15T10:00:00+00:00'
201:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Profile created successfully'
data:
id: 1
user_id: 1
company_name: 'Acme Corp'
email: company@example.com
address_line_1: '123 Main St'
country_id: 1
state_id: 1
city_id: 1
zip_postal_code: '12345'
phone: '1234567890'
company_logo: null
created_at: '2026-01-15T10:00:00+00:00'
updated_at: '2026-01-15T10:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Profile created successfully'
data:
type: object
properties:
id:
type: integer
example: 1
user_id:
type: integer
example: 1
company_name:
type: string
example: 'Acme Corp'
email:
type: string
example: company@example.com
address_line_1:
type: string
example: '123 Main St'
country_id:
type: integer
example: 1
state_id:
type: integer
example: 1
city_id:
type: integer
example: 1
zip_postal_code:
type: string
example: '12345'
phone:
type: string
example: '1234567890'
company_logo:
type: string
example: null
nullable: true
created_at:
type: string
example: '2026-01-15T10:00:00+00:00'
updated_at:
type: string
example: '2026-01-15T10:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Only companies can access this endpoint.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Only companies can access this endpoint.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
email:
- 'The email has already been taken.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
email:
type: array
example:
- 'The email has already been taken.'
items:
type: string
tags:
- 'Company Profile'
requestBody:
required: false
content:
multipart/form-data:
schema:
type: object
properties:
company_name:
type: string
description: 'optional Company name.'
example: 'Acme Corporation'
nullable: true
email:
type: string
description: 'optional Email address.'
example: company@example.com
nullable: true
address_line_1:
type: string
description: 'optional Address line 1.'
example: '123 Main Street'
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.'
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
zip_postal_code:
type: string
description: 'optional ZIP/Postal code.'
example: '12345'
nullable: true
phone:
type: string
description: 'optional Phone number.'
example: '1234567890'
nullable: true
phone_country_code_id:
type: integer
description: 'optional Phone country code ID.'
example: 1
nullable: true
company_logo:
type: string
format: binary
description: 'optional Company logo file (max 2MB, jpeg/png/jpg/gif).'
nullable: true
/api/v1/contact:
post:
summary: 'Store a new contact form submission.'
operationId: storeANewContactFormSubmission
description: ''
parameters: []
responses:
200:
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'
message: 'Hello, I would like to know more about your services.'
created_at: '2024-01-11T16:00:00+00:00'
updated_at: '2024-01-11T16:00:00+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'
message:
type: string
example: 'Hello, I would like to know more about your services.'
created_at:
type: string
example: '2024-01-11T16:00:00+00:00'
updated_at:
type: string
example: '2024-01-11T16:00:00+00:00'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
name:
- 'Name is required.'
email:
- 'Email is required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
name:
type: array
example:
- 'Name is required.'
items:
type: string
email:
type: array
example:
- 'Email is required.'
items:
type: string
tags:
- Contact
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The name of the contact.'
example: 'John Doe'
email:
type: string
description: 'The email address of the contact.'
example: john@example.com
phone:
type: string
description: 'optional The phone number of the contact.'
example: '+1234567890'
nullable: true
message:
type: string
description: 'The message from the contact.'
example: 'Hello, I would like to know more about your services.'
required:
- name
- email
- message
security: []
/api/v1/admin/contacts:
get:
summary: 'Get list of all contact form submissions (Admin only).'
operationId: getListOfAllContactFormSubmissionsAdminOnly
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Contacts retrieved successfully'
data:
-
id: 1
name: 'John Doe'
email: john@example.com
phone: '+1234567890'
message: 'Hello, I would like to know more about your services.'
created_at: '2024-01-11T16:00:00+00:00'
updated_at: '2024-01-11T16:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Contacts retrieved successfully'
data:
type: array
example:
-
id: 1
name: 'John Doe'
email: john@example.com
phone: '+1234567890'
message: 'Hello, I would like to know more about your services.'
created_at: '2024-01-11T16:00:00+00:00'
updated_at: '2024-01-11T16:00:00+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'
message:
type: string
example: 'Hello, I would like to know more about your services.'
created_at:
type: string
example: '2024-01-11T16:00:00+00:00'
updated_at:
type: string
example: '2024-01-11T16:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
tags:
- Contact
'/api/v1/admin/contacts/{id}':
delete:
summary: 'Delete a contact form submission (Admin only).'
operationId: deleteAContactFormSubmissionAdminOnly
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Contact deleted successfully'
data: null
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Contact deleted successfully'
data:
type: string
example: null
nullable: 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: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Contact not found.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Contact not found.'
tags:
- Contact
parameters:
-
in: path
name: id
description: 'The ID of the contact to delete.'
example: 1
required: true
schema:
type: integer
/api/v1/designations:
get:
summary: 'Get list of all designations (Public endpoint for frontend users).'
operationId: getListOfAllDesignationsPublicEndpointForFrontendUsers
description: ''
parameters:
-
in: query
name: is_active
description: 'Filter by active status.'
example: true
required: false
schema:
type: boolean
description: 'Filter by active status.'
example: true
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Designations retrieved successfully'
data:
-
id: 1
name: 'Software Engineer'
description: 'Develops software applications'
is_active: true
created_at: '2024-01-14 11:32:19'
updated_at: '2024-01-14 11:32:19'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Designations retrieved successfully'
data:
type: array
example:
-
id: 1
name: 'Software Engineer'
description: 'Develops software applications'
is_active: true
created_at: '2024-01-14 11:32:19'
updated_at: '2024-01-14 11:32:19'
items:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'Software Engineer'
description:
type: string
example: 'Develops software applications'
is_active:
type: boolean
example: true
created_at:
type: string
example: '2024-01-14 11:32:19'
updated_at:
type: string
example: '2024-01-14 11:32:19'
tags:
- Designation
security: []
/api/v1/admin/designations:
get:
summary: 'Get list of all designations (Admin only).'
operationId: getListOfAllDesignationsAdminOnly
description: ''
parameters:
-
in: query
name: is_active
description: 'Filter by active status.'
example: true
required: false
schema:
type: boolean
description: 'Filter by active status.'
example: true
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Designations retrieved successfully'
data:
-
id: 1
name: 'Software Engineer'
description: 'Develops software applications'
is_active: true
created_at: '2024-01-14 11:32:19'
updated_at: '2024-01-14 11:32:19'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Designations retrieved successfully'
data:
type: array
example:
-
id: 1
name: 'Software Engineer'
description: 'Develops software applications'
is_active: true
created_at: '2024-01-14 11:32:19'
updated_at: '2024-01-14 11:32:19'
items:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'Software Engineer'
description:
type: string
example: 'Develops software applications'
is_active:
type: boolean
example: true
created_at:
type: string
example: '2024-01-14 11:32:19'
updated_at:
type: string
example: '2024-01-14 11:32:19'
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: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
tags:
- Designation
post:
summary: 'Store a new designation (Admin only).'
operationId: storeANewDesignationAdminOnly
description: ''
parameters: []
responses:
201:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Designation created successfully'
data:
id: 1
name: 'Software Engineer'
description: 'Develops software applications'
is_active: true
created_at: '2024-01-14 11:32:19'
updated_at: '2024-01-14 11:32:19'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Designation created successfully'
data:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'Software Engineer'
description:
type: string
example: 'Develops software applications'
is_active:
type: boolean
example: true
created_at:
type: string
example: '2024-01-14 11:32:19'
updated_at:
type: string
example: '2024-01-14 11:32:19'
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: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
name:
- 'Name is required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
name:
type: array
example:
- 'Name is required.'
items:
type: string
tags:
- Designation
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The name of the designation.'
example: 'Software Engineer'
description:
type: string
description: 'optional The description of the designation.'
example: 'Develops software applications'
nullable: true
is_active:
type: boolean
description: 'optional Whether the designation is active. Defaults to true.'
example: true
nullable: true
required:
- name
'/api/v1/admin/designations/{id}':
get:
summary: 'Get a specific designation (Admin only).'
operationId: getASpecificDesignationAdminOnly
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Designation retrieved successfully'
data:
id: 1
name: 'Software Engineer'
description: 'Develops software applications'
is_active: true
created_at: '2024-01-14 11:32:19'
updated_at: '2024-01-14 11:32:19'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Designation retrieved successfully'
data:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'Software Engineer'
description:
type: string
example: 'Develops software applications'
is_active:
type: boolean
example: true
created_at:
type: string
example: '2024-01-14 11:32:19'
updated_at:
type: string
example: '2024-01-14 11:32:19'
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: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Designation not found.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Designation not found.'
tags:
- Designation
put:
summary: 'Update a designation (Admin only).'
operationId: updateADesignationAdminOnly
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Designation updated successfully'
data:
id: 1
name: 'Senior Software Engineer'
description: 'Develops and maintains software applications'
is_active: true
created_at: '2024-01-14 11:32:19'
updated_at: '2024-01-14 11:33:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Designation updated successfully'
data:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'Senior Software Engineer'
description:
type: string
example: 'Develops and maintains software applications'
is_active:
type: boolean
example: true
created_at:
type: string
example: '2024-01-14 11:32:19'
updated_at:
type: string
example: '2024-01-14 11:33: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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Designation not found.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Designation not found.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
name:
- 'Name is required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
name:
type: array
example:
- 'Name is required.'
items:
type: string
tags:
- Designation
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The name of the designation.'
example: 'Senior Software Engineer'
description:
type: string
description: 'optional The description of the designation.'
example: 'Develops and maintains software applications'
nullable: true
is_active:
type: boolean
description: 'optional Whether the designation is active.'
example: true
nullable: true
required:
- name
delete:
summary: 'Delete a designation (Admin only).'
operationId: deleteADesignationAdminOnly
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Designation deleted successfully'
data: null
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Designation deleted successfully'
data:
type: string
example: null
nullable: 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: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Designation not found.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Designation not found.'
tags:
- Designation
parameters:
-
in: path
name: id
description: 'The ID of the designation.'
example: 1
required: true
schema:
type: integer
/api/v1/dispute-categories:
get:
summary: 'List dispute categories (public - for dropdown when raising dispute).'
operationId: listDisputeCategoriespublicForDropdownWhenRaisingDispute
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Dispute categories retrieved successfully'
data: []
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Dispute categories retrieved successfully'
data:
type: array
example: []
tags:
- 'Dispute Categories'
security: []
/api/v1/disputes/form-data:
get:
summary: 'Get form data for raising a dispute: dispute categories and eligible projects.'
operationId: getFormDataForRaisingADisputeDisputeCategoriesAndEligibleProjects
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:
- Disputes
/api/v1/disputes:
get:
summary: 'List disputes for the logged-in company or expert.'
operationId: listDisputesForTheLoggedInCompanyOrExpert
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:
- Disputes
post:
summary: 'Store a new dispute.'
operationId: storeANewDispute
description: ''
parameters: []
responses: { }
tags:
- Disputes
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
subject:
type: string
description: 'Must not be greater than 255 characters.'
example: b
dispute_category_id:
type: integer
description: 'The id of an existing record in the dispute_categories table.'
example: 16
project_id:
type: integer
description: 'The id of an existing record in the projects table.'
example: 16
description:
type: string
description: ''
example: 'Eius et animi quos velit et.'
files:
type: array
description: 'Must be a file. Must not be greater than 10240 kilobytes.'
items:
type: string
format: binary
required:
- subject
- dispute_category_id
- project_id
- description
'/api/v1/disputes/{dispute_id}':
get:
summary: 'Show a single dispute.'
operationId: showASingleDispute
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:
- Disputes
put:
summary: 'Update a dispute (only ongoing disputes).'
operationId: updateADisputeonlyOngoingDisputes
description: ''
parameters: []
responses: { }
tags:
- Disputes
requestBody:
required: false
content:
multipart/form-data:
schema:
type: object
properties:
subject:
type: string
description: 'Must not be greater than 255 characters.'
example: b
dispute_category_id:
type: integer
description: 'The id of an existing record in the dispute_categories table.'
example: 16
project_id:
type: integer
description: 'The id of an existing record in the projects table.'
example: 16
description:
type: string
description: ''
example: 'Eius et animi quos velit et.'
files:
type: array
description: 'Must be a file. Must not be greater than 10240 kilobytes.'
items:
type: string
format: binary
patch:
summary: 'Update a dispute (only ongoing disputes).'
operationId: updateADisputeonlyOngoingDisputes
description: ''
parameters: []
responses: { }
tags:
- Disputes
requestBody:
required: false
content:
multipart/form-data:
schema:
type: object
properties:
subject:
type: string
description: 'Must not be greater than 255 characters.'
example: b
dispute_category_id:
type: integer
description: 'The id of an existing record in the dispute_categories table.'
example: 16
project_id:
type: integer
description: 'The id of an existing record in the projects table.'
example: 16
description:
type: string
description: ''
example: 'Eius et animi quos velit et.'
files:
type: array
description: 'Must be a file. Must not be greater than 10240 kilobytes.'
items:
type: string
format: binary
delete:
summary: 'Delete a dispute (only ongoing disputes).'
operationId: deleteADisputeonlyOngoingDisputes
description: ''
parameters: []
responses: { }
tags:
- Disputes
parameters:
-
in: path
name: dispute_id
description: 'The ID of the dispute.'
example: 16
required: true
schema:
type: integer
/api/v1/expert/payment-details:
get:
summary: "Get the current expert's payment details."
operationId: getTheCurrentExpertsPaymentDetails
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Payment details retrieved successfully'
data:
id: 1
user_id: 1
payment_method: paypal
paypal_email: expert@example.com
country_id: null
state_id: null
city_id: null
zip_postal_code: null
address: null
bank_name: null
swift_code_or_ifsc: null
country: null
state: null
city: null
created_at: '2026-01-14T12:00:00+00:00'
updated_at: '2026-01-14T12:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Payment details retrieved successfully'
data:
type: object
properties:
id:
type: integer
example: 1
user_id:
type: integer
example: 1
payment_method:
type: string
example: paypal
paypal_email:
type: string
example: expert@example.com
country_id:
type: string
example: null
nullable: true
state_id:
type: string
example: null
nullable: true
city_id:
type: string
example: null
nullable: true
zip_postal_code:
type: string
example: null
nullable: true
address:
type: string
example: null
nullable: true
bank_name:
type: string
example: null
nullable: true
swift_code_or_ifsc:
type: string
example: null
nullable: true
country:
type: string
example: null
nullable: true
state:
type: string
example: null
nullable: true
city:
type: string
example: null
nullable: true
created_at:
type: string
example: '2026-01-14T12:00:00+00:00'
updated_at:
type: string
example: '2026-01-14T12:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Only experts can access this endpoint.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Only experts can access this endpoint.'
tags:
- 'Expert Payment Details'
put:
summary: "Update or create the expert's payment details."
operationId: updateOrCreateTheExpertsPaymentDetails
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Payment details updated successfully'
data:
id: 1
user_id: 1
payment_method: paypal
paypal_email: expert@example.com
country: null
state: null
city: null
zip_postal_code: null
address: null
bank_name: null
swift_code_or_ifsc: null
created_at: '2026-01-14T12:00:00+00:00'
updated_at: '2026-01-14T12:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Payment details updated successfully'
data:
type: object
properties:
id:
type: integer
example: 1
user_id:
type: integer
example: 1
payment_method:
type: string
example: paypal
paypal_email:
type: string
example: expert@example.com
country:
type: string
example: null
nullable: true
state:
type: string
example: null
nullable: true
city:
type: string
example: null
nullable: true
zip_postal_code:
type: string
example: null
nullable: true
address:
type: string
example: null
nullable: true
bank_name:
type: string
example: null
nullable: true
swift_code_or_ifsc:
type: string
example: null
nullable: true
created_at:
type: string
example: '2026-01-14T12:00:00+00:00'
updated_at:
type: string
example: '2026-01-14T12:00:00+00:00'
201:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Payment details created successfully'
data:
id: 1
user_id: 1
payment_method: bank_transfer
paypal_email: null
country_id: 1
state_id: 1
city_id: 1
zip_postal_code: '90001'
address: '123 Main Street'
bank_name: 'Bank of America'
swift_code_or_ifsc: BOFAUS3N
country:
id: 1
name: 'United States'
state:
id: 1
name: California
city:
id: 1
name: 'Los Angeles'
created_at: '2026-01-14T12:00:00+00:00'
updated_at: '2026-01-14T12:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Payment details created successfully'
data:
type: object
properties:
id:
type: integer
example: 1
user_id:
type: integer
example: 1
payment_method:
type: string
example: bank_transfer
paypal_email:
type: string
example: null
nullable: true
country_id:
type: integer
example: 1
state_id:
type: integer
example: 1
city_id:
type: integer
example: 1
zip_postal_code:
type: string
example: '90001'
address:
type: string
example: '123 Main Street'
bank_name:
type: string
example: 'Bank of America'
swift_code_or_ifsc:
type: string
example: BOFAUS3N
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: California
city:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'Los Angeles'
created_at:
type: string
example: '2026-01-14T12:00:00+00:00'
updated_at:
type: string
example: '2026-01-14T12:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Only experts can access this endpoint.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Only experts can access this endpoint.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
payment_method:
- 'The payment method field is required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
payment_method:
type: array
example:
- 'The payment method field is required.'
items:
type: string
tags:
- 'Expert Payment Details'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
payment_method:
type: string
description: 'The payment method. Must be either "bank_transfer" or "paypal".'
example: paypal
paypal_email:
type: string
description: 'required_if:payment_method,paypal The PayPal email address.'
example: expert@example.com
nullable: true
country_id:
type: integer
description: 'required_if:payment_method,bank_transfer The country ID.'
example: 1
nullable: true
state_id:
type: integer
description: 'required_if:payment_method,bank_transfer The state ID.'
example: 1
nullable: true
city_id:
type: integer
description: 'required_if:payment_method,bank_transfer The city ID.'
example: 1
nullable: true
zip_postal_code:
type: string
description: 'required_if:payment_method,bank_transfer The ZIP/Postal code.'
example: '90001'
nullable: true
address:
type: string
description: 'required_if:payment_method,bank_transfer The address.'
example: '123 Main Street'
nullable: true
bank_name:
type: string
description: 'required_if:payment_method,bank_transfer The bank name.'
example: 'Bank of America'
nullable: true
swift_code_or_ifsc:
type: string
description: 'required_if:payment_method,bank_transfer The SWIFT code or IFSC code.'
example: BOFAUS3N
nullable: true
required:
- payment_method
/api/v1/expert/profile:
get:
summary: "Get the current expert's profile."
operationId: getTheCurrentExpertsProfile
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Profile retrieved successfully'
data:
id: 1
user_id: 1
first_name: John
last_name: Doe
email: expert@example.com
designation_id: 1
experience: 5
bio: 'Expert in software development'
phone: '1234567890'
address_line_1: '123 Main St'
country_id: 1
state_id: 1
city_id: 1
zip_postal_code: '12345'
profile_image: 'http://localhost/storage/profiles/image.jpg'
created_at: '2026-01-15T05:14:18+00:00'
updated_at: '2026-01-15T05:14:18+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: '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: expert@example.com
designation_id:
type: integer
example: 1
experience:
type: integer
example: 5
bio:
type: string
example: 'Expert in software development'
phone:
type: string
example: '1234567890'
address_line_1:
type: string
example: '123 Main St'
country_id:
type: integer
example: 1
state_id:
type: integer
example: 1
city_id:
type: integer
example: 1
zip_postal_code:
type: string
example: '12345'
profile_image:
type: string
example: 'http://localhost/storage/profiles/image.jpg'
created_at:
type: string
example: '2026-01-15T05:14:18+00:00'
updated_at:
type: string
example: '2026-01-15T05:14:18+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Only experts can access this endpoint.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Only experts can access this endpoint.'
tags:
- 'Expert Profile'
put:
summary: "Update or create the expert's profile."
operationId: updateOrCreateTheExpertsProfile
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Profile updated successfully'
data:
id: 1
user_id: 1
first_name: John
last_name: Doe
email: expert@example.com
designation_id: 1
experience: 5
bio: 'Expert in software development'
phone: '1234567890'
address_line_1: '123 Main St'
country_id: 1
state_id: 1
city_id: 1
zip_postal_code: '12345'
profile_image: 'http://localhost/storage/profiles/image.jpg'
created_at: '2026-01-15T05:14:18+00:00'
updated_at: '2026-01-15T05:14:18+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Profile updated 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: expert@example.com
designation_id:
type: integer
example: 1
experience:
type: integer
example: 5
bio:
type: string
example: 'Expert in software development'
phone:
type: string
example: '1234567890'
address_line_1:
type: string
example: '123 Main St'
country_id:
type: integer
example: 1
state_id:
type: integer
example: 1
city_id:
type: integer
example: 1
zip_postal_code:
type: string
example: '12345'
profile_image:
type: string
example: 'http://localhost/storage/profiles/image.jpg'
created_at:
type: string
example: '2026-01-15T05:14:18+00:00'
updated_at:
type: string
example: '2026-01-15T05:14:18+00:00'
201:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Profile created successfully'
data:
id: 1
user_id: 1
first_name: John
last_name: Doe
email: expert@example.com
designation_id: 1
experience: 5
bio: 'Expert in software development'
phone: '1234567890'
address_line_1: '123 Main St'
country_id: 1
state_id: 1
city_id: 1
zip_postal_code: '12345'
profile_image: null
created_at: '2026-01-15T05:14:18+00:00'
updated_at: '2026-01-15T05:14:18+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Profile created 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: expert@example.com
designation_id:
type: integer
example: 1
experience:
type: integer
example: 5
bio:
type: string
example: 'Expert in software development'
phone:
type: string
example: '1234567890'
address_line_1:
type: string
example: '123 Main St'
country_id:
type: integer
example: 1
state_id:
type: integer
example: 1
city_id:
type: integer
example: 1
zip_postal_code:
type: string
example: '12345'
profile_image:
type: string
example: null
nullable: true
created_at:
type: string
example: '2026-01-15T05:14:18+00:00'
updated_at:
type: string
example: '2026-01-15T05:14:18+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Only experts can access this endpoint.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Only experts can access this endpoint.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
email:
- 'The email has already been taken.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
email:
type: array
example:
- 'The email has already been taken.'
items:
type: string
tags:
- 'Expert Profile'
requestBody:
required: false
content:
multipart/form-data:
schema:
type: object
properties:
first_name:
type: string
description: 'optional First name.'
example: John
nullable: true
last_name:
type: string
description: 'optional Last name.'
example: Doe
nullable: true
email:
type: string
description: 'optional Email address.'
example: expert@example.com
nullable: true
designation_id:
type: integer
description: 'optional Designation ID.'
example: 1
nullable: true
experience:
type: integer
description: 'optional Experience in years.'
example: 5
nullable: true
bio:
type: string
description: 'optional Bio/Description.'
example: 'Expert in software development'
nullable: true
phone:
type: string
description: 'optional Phone number.'
example: '1234567890'
nullable: true
phone_country_code_id:
type: integer
description: 'optional Phone country code ID.'
example: 1
nullable: true
address_line_1:
type: string
description: 'optional Address line 1.'
example: '123 Main Street'
nullable: true
address_line_2:
type: string
description: 'optional Address line 2.'
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
zip_postal_code:
type: string
description: 'optional ZIP/Postal code.'
example: '12345'
nullable: true
profile_image:
type: string
format: binary
description: 'optional Profile image file (max 2MB, jpeg/png/jpg/gif).'
nullable: true
/api/v1/industry-types:
get:
summary: 'Get list of all industry types (Public endpoint for frontend users).'
operationId: getListOfAllIndustryTypesPublicEndpointForFrontendUsers
description: ''
parameters:
-
in: query
name: is_active
description: 'Filter by active status.'
example: true
required: false
schema:
type: boolean
description: 'Filter by active status.'
example: true
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Industry types retrieved successfully'
data:
-
id: 1
name: Technology
description: 'Technology industry'
image: 'http://localhost/industry-types/tech.jpg'
is_active: true
created_at: '2024-01-16 03:26:06'
updated_at: '2024-01-16 03:26:06'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Industry types retrieved successfully'
data:
type: array
example:
-
id: 1
name: Technology
description: 'Technology industry'
image: 'http://localhost/industry-types/tech.jpg'
is_active: true
created_at: '2024-01-16 03:26:06'
updated_at: '2024-01-16 03:26:06'
items:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: Technology
description:
type: string
example: 'Technology industry'
image:
type: string
example: 'http://localhost/industry-types/tech.jpg'
is_active:
type: boolean
example: true
created_at:
type: string
example: '2024-01-16 03:26:06'
updated_at:
type: string
example: '2024-01-16 03:26:06'
tags:
- 'Industry Type'
security: []
/api/v1/admin/industry-types:
get:
summary: 'Get list of all industry types (Admin only).'
operationId: getListOfAllIndustryTypesAdminOnly
description: ''
parameters:
-
in: query
name: is_active
description: 'Filter by active status.'
example: true
required: false
schema:
type: boolean
description: 'Filter by active status.'
example: true
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Industry types retrieved successfully'
data:
-
id: 1
name: Technology
description: 'Technology industry'
image: 'http://localhost/industry-types/tech.jpg'
is_active: true
created_at: '2024-01-16 03:26:06'
updated_at: '2024-01-16 03:26:06'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Industry types retrieved successfully'
data:
type: array
example:
-
id: 1
name: Technology
description: 'Technology industry'
image: 'http://localhost/industry-types/tech.jpg'
is_active: true
created_at: '2024-01-16 03:26:06'
updated_at: '2024-01-16 03:26:06'
items:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: Technology
description:
type: string
example: 'Technology industry'
image:
type: string
example: 'http://localhost/industry-types/tech.jpg'
is_active:
type: boolean
example: true
created_at:
type: string
example: '2024-01-16 03:26:06'
updated_at:
type: string
example: '2024-01-16 03:26:06'
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: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
tags:
- 'Industry Type'
post:
summary: 'Store a new industry type (Admin only).'
operationId: storeANewIndustryTypeAdminOnly
description: ''
parameters: []
responses:
201:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Industry type created successfully'
data:
id: 1
name: Technology
description: 'Technology industry'
image: 'http://localhost/industry-types/tech.jpg'
is_active: true
created_at: '2024-01-16 03:26:06'
updated_at: '2024-01-16 03:26:06'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Industry type created successfully'
data:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: Technology
description:
type: string
example: 'Technology industry'
image:
type: string
example: 'http://localhost/industry-types/tech.jpg'
is_active:
type: boolean
example: true
created_at:
type: string
example: '2024-01-16 03:26:06'
updated_at:
type: string
example: '2024-01-16 03:26:06'
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: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
name:
- 'Name is required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
name:
type: array
example:
- 'Name is required.'
items:
type: string
tags:
- 'Industry Type'
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
name:
type: string
description: 'The name of the industry type.'
example: Technology
description:
type: string
description: 'optional The description of the industry type.'
example: 'Technology industry'
nullable: true
image:
type: string
format: binary
description: 'optional Industry type image (max 2MB, jpeg/png/jpg/gif).'
nullable: true
is_active:
type: boolean
description: 'optional Whether the industry type is active. Defaults to true.'
example: true
nullable: true
required:
- name
'/api/v1/admin/industry-types/{id}':
put:
summary: 'Update an industry type (Admin only).'
operationId: updateAnIndustryTypeAdminOnly
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Industry type updated successfully'
data:
id: 1
name: 'Information Technology'
description: 'Information Technology industry'
image: 'http://localhost/industry-types/tech.jpg'
is_active: true
created_at: '2024-01-16 03:26:06'
updated_at: '2024-01-16 03:27:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Industry type updated successfully'
data:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'Information Technology'
description:
type: string
example: 'Information Technology industry'
image:
type: string
example: 'http://localhost/industry-types/tech.jpg'
is_active:
type: boolean
example: true
created_at:
type: string
example: '2024-01-16 03:26:06'
updated_at:
type: string
example: '2024-01-16 03:27: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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Industry type not found.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Industry type not found.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
name:
- 'Name is required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
name:
type: array
example:
- 'Name is required.'
items:
type: string
tags:
- 'Industry Type'
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
name:
type: string
description: 'The name of the industry type.'
example: 'Information Technology'
description:
type: string
description: 'optional The description of the industry type.'
example: 'Information Technology industry'
nullable: true
image:
type: string
format: binary
description: 'optional Industry type image (max 2MB, jpeg/png/jpg/gif).'
nullable: true
is_active:
type: boolean
description: 'optional Whether the industry type is active.'
example: true
nullable: true
required:
- name
delete:
summary: 'Delete an industry type (Admin only).'
operationId: deleteAnIndustryTypeAdminOnly
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Industry type deleted successfully'
data: null
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Industry type deleted successfully'
data:
type: string
example: null
nullable: 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: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Industry type not found.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Industry type not found.'
tags:
- 'Industry Type'
parameters:
-
in: path
name: id
description: 'The ID of the industry type.'
example: 1
required: true
schema:
type: integer
/api/v1/location/countries:
get:
summary: 'Get list of all active countries.'
operationId: getListOfAllActiveCountries
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Countries retrieved successfully'
data:
-
id: 1
name: 'United States'
code: US
code3: USA
is_active: true
sort_order: 0
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Countries retrieved successfully'
data:
type: array
example:
-
id: 1
name: 'United States'
code: US
code3: USA
is_active: true
sort_order: 0
items:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'United States'
code:
type: string
example: US
code3:
type: string
example: USA
is_active:
type: boolean
example: true
sort_order:
type: integer
example: 0
tags:
- Location
security: []
'/api/v1/location/countries/{countryId}/states':
get:
summary: 'Get list of all active states for a specific country.'
operationId: getListOfAllActiveStatesForASpecificCountry
description: ''
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
code: CA
is_active: true
sort_order: 0
properties:
success:
type: boolean
example: true
message:
type: string
example: 'States retrieved successfully'
data:
type: array
example:
-
id: 1
country_id: 1
name: California
code: CA
is_active: true
sort_order: 0
items:
type: object
properties:
id:
type: integer
example: 1
country_id:
type: integer
example: 1
name:
type: string
example: California
code:
type: string
example: CA
is_active:
type: boolean
example: true
sort_order:
type: integer
example: 0
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: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: country_id
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 active cities for a specific state.'
operationId: getListOfAllActiveCitiesForASpecificState
description: ''
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'
is_active: true
sort_order: 0
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'
is_active: true
sort_order: 0
items:
type: object
properties:
id:
type: integer
example: 1
state_id:
type: integer
example: 1
name:
type: string
example: 'Los Angeles'
is_active:
type: boolean
example: true
sort_order:
type: integer
example: 0
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: ''
example: architecto
required: true
schema:
type: string
-
in: path
name: state_id
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: ''
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/project/{project_id}/expert-milestones':
get:
summary: 'List milestone payments for an awarded project (expert only – the awarded expert).'
operationId: listMilestonePaymentsForAnAwardedProjectexpertOnlyTheAwardedExpert
description: 'Shows expert_payout (milestone amount minus platform fee). Payment status is set by admin when paying manually.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Milestones retrieved successfully'
data:
milestones: []
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Milestones retrieved successfully'
data:
type: object
properties:
milestones:
type: array
example: []
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'You can only view milestones for projects you are awarded on.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'You can only view milestones for projects you are awarded on.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Project must be awarded before viewing milestones.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Project must be awarded before viewing milestones.'
tags:
- 'Milestone Payments'
parameters:
-
in: path
name: project_id
description: 'The ID of the project.'
example: 16
required: true
schema:
type: integer
'/api/v1/project/{project_id}/milestones':
get:
summary: 'List milestone payments for an awarded project (company only).'
operationId: listMilestonePaymentsForAnAwardedProjectcompanyOnly
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Milestones retrieved successfully'
data:
milestones: []
project_total_cost: 1000
allocated_amount: 0
remaining_amount: 1000
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Milestones retrieved successfully'
data:
type: object
properties:
milestones:
type: array
example: []
project_total_cost:
type: integer
example: 1000
allocated_amount:
type: integer
example: 0
remaining_amount:
type: integer
example: 1000
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'You can only manage milestones for your own awarded projects.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'You can only manage milestones for your own awarded projects.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Project must be awarded to an expert before adding milestones.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Project must be awarded to an expert before adding milestones.'
tags:
- 'Milestone Payments'
post:
summary: 'Add a milestone payment. Sum of all milestone amounts must not exceed project total cost.'
operationId: addAMilestonePaymentSumOfAllMilestoneAmountsMustNotExceedProjectTotalCost
description: ''
parameters: []
responses:
201:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Milestone added successfully'
data:
milestone: { }
remaining_amount: 500
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Milestone added successfully'
data:
type: object
properties:
milestone:
type: object
properties: { }
remaining_amount:
type: integer
example: 500
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Milestone total would exceed project cost. Remaining amount: 500.00'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Milestone total would exceed project cost. Remaining amount: 500.00'
tags:
- 'Milestone Payments'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Milestone name.'
example: 'Design approval'
description:
type: string
description: 'optional Description.'
example: 'Final design sign-off'
nullable: true
amount:
type: number
description: 'Amount for this milestone.'
example: 500.0
milestone_completion_date:
type: date
description: 'Completion date (today or future).'
example: '2026-03-01'
required:
- name
- amount
- milestone_completion_date
parameters:
-
in: path
name: project_id
description: 'The ID of the project.'
example: 16
required: true
schema:
type: integer
'/api/v1/project/{project_id}/milestones/{milestone_id}/create-checkout-session':
post:
summary: 'Create Stripe checkout session to pay for a milestone. Redirect user to checkout_url; on success Stripe webhook marks milestone completed.'
operationId: createStripeCheckoutSessionToPayForAMilestoneRedirectUserToCheckoutUrlOnSuccessStripeWebhookMarksMilestoneCompleted
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Checkout session created'
data:
checkout_url: 'https://checkout.stripe.com/...'
session_id: cs_xxx
amount: 500
currency: USD
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Checkout session created'
data:
type: object
properties:
checkout_url:
type: string
example: 'https://checkout.stripe.com/...'
session_id:
type: string
example: cs_xxx
amount:
type: integer
example: 500
currency:
type: string
example: USD
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'You can only manage milestones for your own awarded projects.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'You can only manage milestones for your own awarded projects.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'This milestone has already been paid and completed.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'This milestone has already been paid and completed.'
tags:
- 'Milestone Payments'
parameters:
-
in: path
name: project_id
description: 'The ID of the project.'
example: 16
required: true
schema:
type: integer
-
in: path
name: milestone_id
description: 'The ID of the milestone.'
example: 16
required: true
schema:
type: integer
'/api/v1/project/{project_id}/milestones/{milestone_id}':
put:
summary: 'Update a milestone payment. Total of all milestones must not exceed project cost.'
operationId: updateAMilestonePaymentTotalOfAllMilestonesMustNotExceedProjectCost
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Milestone updated successfully'
data:
milestone: { }
remaining_amount: 0
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Milestone updated successfully'
data:
type: object
properties:
milestone:
type: object
properties: { }
remaining_amount:
type: integer
example: 0
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Milestone total would exceed project cost. Max allowed for this milestone: 500.00'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Milestone total would exceed project cost. Max allowed for this milestone: 500.00'
tags:
- 'Milestone Payments'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'optional Milestone name.'
example: architecto
description:
type: string
description: 'optional Description.'
example: 'Eius et animi quos velit et.'
nullable: true
amount:
type: number
description: 'optional Amount.'
example: 4326.41688
milestone_completion_date:
type: date
description: 'optional Completion date.'
example: architecto
patch:
summary: 'Update a milestone payment. Total of all milestones must not exceed project cost.'
operationId: updateAMilestonePaymentTotalOfAllMilestonesMustNotExceedProjectCost
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Milestone updated successfully'
data:
milestone: { }
remaining_amount: 0
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Milestone updated successfully'
data:
type: object
properties:
milestone:
type: object
properties: { }
remaining_amount:
type: integer
example: 0
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Milestone total would exceed project cost. Max allowed for this milestone: 500.00'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Milestone total would exceed project cost. Max allowed for this milestone: 500.00'
tags:
- 'Milestone Payments'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'optional Milestone name.'
example: architecto
description:
type: string
description: 'optional Description.'
example: 'Eius et animi quos velit et.'
nullable: true
amount:
type: number
description: 'optional Amount.'
example: 4326.41688
milestone_completion_date:
type: date
description: 'optional Completion date.'
example: architecto
delete:
summary: 'Delete a milestone payment.'
operationId: deleteAMilestonePayment
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Milestone deleted successfully'
data:
remaining_amount: 1000
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Milestone deleted successfully'
data:
type: object
properties:
remaining_amount:
type: integer
example: 1000
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Milestone not found'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Milestone not found'
tags:
- 'Milestone Payments'
parameters:
-
in: path
name: project_id
description: 'The ID of the project.'
example: 16
required: true
schema:
type: integer
-
in: path
name: milestone_id
description: 'The ID of the milestone.'
example: 16
required: true
schema:
type: integer
/api/v1/project/my-projects:
get:
summary: 'List all projects for the logged-in company (draft, published, cancelled).'
operationId: listAllProjectsForTheLoggedInCompanydraftPublishedCancelled
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Company projects retrieved successfully'
data:
-
id: 1
user_id: 1
status: draft
industry_type_id: 1
industry_type:
id: 1
name: Technology
requirement_title: 'Need a Laravel Developer'
requirement_type: Development
requirement_details: 'We need an experienced Laravel developer'
experience_level_years: 5
project_type: hourly
estimated_hours: 40
rate: '50.00'
amount: null
questions: []
created_at: '2026-01-16T10:00:00+00:00'
updated_at: '2026-01-16T10:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Company projects retrieved successfully'
data:
type: array
example:
-
id: 1
user_id: 1
status: draft
industry_type_id: 1
industry_type:
id: 1
name: Technology
requirement_title: 'Need a Laravel Developer'
requirement_type: Development
requirement_details: 'We need an experienced Laravel developer'
experience_level_years: 5
project_type: hourly
estimated_hours: 40
rate: '50.00'
amount: null
questions: []
created_at: '2026-01-16T10:00:00+00:00'
updated_at: '2026-01-16T10:00:00+00:00'
items:
type: object
properties:
id:
type: integer
example: 1
user_id:
type: integer
example: 1
status:
type: string
example: draft
industry_type_id:
type: integer
example: 1
industry_type:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: Technology
requirement_title:
type: string
example: 'Need a Laravel Developer'
requirement_type:
type: string
example: Development
requirement_details:
type: string
example: 'We need an experienced Laravel developer'
experience_level_years:
type: integer
example: 5
project_type:
type: string
example: hourly
estimated_hours:
type: integer
example: 40
rate:
type: string
example: '50.00'
amount:
type: string
example: null
nullable: true
questions:
type: array
example: []
created_at:
type: string
example: '2026-01-16T10:00:00+00:00'
updated_at:
type: string
example: '2026-01-16T10:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Only companies can view their projects.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Only companies can view their projects.'
tags:
- Projects
'/api/v1/project/my-projects/{project_id}':
get:
summary: 'Get a single project for the logged-in company (any status: draft, published, cancelled).'
operationId: getASingleProjectForTheLoggedInCompanyanyStatusDraftPublishedCancelled
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Project retrieved successfully'
data:
id: 1
user_id: 1
status: draft
industry_type_id: 1
industry_type:
id: 1
name: Technology
requirement_title: 'Need a Laravel Developer'
requirement_type: Development
requirement_details: 'We need an experienced Laravel developer'
experience_level_years: 5
project_type: hourly
estimated_hours: 40
rate: '50.00'
amount: null
questions: []
created_at: '2026-01-16T10:00:00+00:00'
updated_at: '2026-01-16T10:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Project retrieved successfully'
data:
type: object
properties:
id:
type: integer
example: 1
user_id:
type: integer
example: 1
status:
type: string
example: draft
industry_type_id:
type: integer
example: 1
industry_type:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: Technology
requirement_title:
type: string
example: 'Need a Laravel Developer'
requirement_type:
type: string
example: Development
requirement_details:
type: string
example: 'We need an experienced Laravel developer'
experience_level_years:
type: integer
example: 5
project_type:
type: string
example: hourly
estimated_hours:
type: integer
example: 40
rate:
type: string
example: '50.00'
amount:
type: string
example: null
nullable: true
questions:
type: array
example: []
created_at:
type: string
example: '2026-01-16T10:00:00+00:00'
updated_at:
type: string
example: '2026-01-16T10:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'You can only view your own projects.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'You can only view your own projects.'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Project not found'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Project not found'
tags:
- Projects
parameters:
-
in: path
name: project_id
description: 'The ID of the project.'
example: 16
required: true
schema:
type: integer
-
in: path
name: project
description: 'The ID of the project.'
example: 1
required: true
schema:
type: integer
/api/v1/project:
post:
summary: 'Create a new project.'
operationId: createANewProject
description: ''
parameters: []
responses:
201:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Project created successfully'
data:
id: 1
user_id: 1
industry_type_id: 1
requirement_title: 'Need a Laravel Developer'
requirement_type: Development
requirement_details: 'We need an experienced Laravel developer'
experience_level_years: 5
project_type: hourly
estimated_hours: 40
rate: '50.00'
amount: null
questions: []
created_at: '2026-01-16T10:00:00+00:00'
updated_at: '2026-01-16T10:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Project created successfully'
data:
type: object
properties:
id:
type: integer
example: 1
user_id:
type: integer
example: 1
industry_type_id:
type: integer
example: 1
requirement_title:
type: string
example: 'Need a Laravel Developer'
requirement_type:
type: string
example: Development
requirement_details:
type: string
example: 'We need an experienced Laravel developer'
experience_level_years:
type: integer
example: 5
project_type:
type: string
example: hourly
estimated_hours:
type: integer
example: 40
rate:
type: string
example: '50.00'
amount:
type: string
example: null
nullable: true
questions:
type: array
example: []
created_at:
type: string
example: '2026-01-16T10:00:00+00:00'
updated_at:
type: string
example: '2026-01-16T10:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Only companies can create projects.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Only companies can create projects.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
industry_type_id:
- 'The industry type id field is required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
industry_type_id:
type: array
example:
- 'The industry type id field is required.'
items:
type: string
tags:
- Projects
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
industry_type_id:
type: integer
description: 'The ID of the industry type.'
example: 1
requirement_type_id:
type: integer
description: 'The id of an existing record in the requirement_types table.'
example: 16
requirement_title:
type: string
description: 'The title of the requirement.'
example: 'Need a Laravel Developer'
requirement_details:
type: string
description: 'Detailed description of the requirement.'
example: 'We need an experienced Laravel developer for our project.'
experience_level_years:
type: integer
description: 'Required experience in years.'
example: 5
project_type:
type: string
description: 'The type of project. Must be "hourly" or "fixed".'
example: hourly
estimated_hours:
type: integer
description: 'required_if:project_type,hourly Estimated hours for hourly projects.'
example: 40
nullable: true
rate:
type: numeric
description: 'required_if:project_type,hourly Rate per hour for hourly projects.'
example: '50.00'
nullable: true
amount:
type: numeric
description: 'required_if:project_type,fixed Total amount for fixed projects.'
example: '2000.00'
nullable: true
is_close_bidding:
type: boolean
description: 'optional When true, project is not shown publicly and no proposal submission.'
example: false
questions:
type: array
description: 'optional Array of questions for proposal submission.'
example:
- architecto
items:
type: string
requirement_type:
type: string
description: 'The type of requirement.'
example: Development
required:
- industry_type_id
- requirement_type_id
- requirement_title
- requirement_details
- experience_level_years
- project_type
- requirement_type
get:
summary: 'List all published projects that are open for proposals (excludes close-bid and awarded projects).'
operationId: listAllPublishedProjectsThatAreOpenForProposalsexcludesCloseBidAndAwardedProjects
description: 'Close-bid projects and awarded projects are not returned. Each project includes `is_awarded` and `is_close_bidding`.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Published projects retrieved successfully'
data:
-
id: 1
user_id: 1
status: published
industry_type_id: 1
industry_type:
id: 1
name: Technology
requirement_title: 'Need a Laravel Developer'
is_awarded: false
questions: []
created_at: '2026-01-16T10:00:00+00:00'
updated_at: '2026-01-16T10:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Published projects retrieved successfully'
data:
type: array
example:
-
id: 1
user_id: 1
status: published
industry_type_id: 1
industry_type:
id: 1
name: Technology
requirement_title: 'Need a Laravel Developer'
is_awarded: false
questions: []
created_at: '2026-01-16T10:00:00+00:00'
updated_at: '2026-01-16T10:00:00+00:00'
items:
type: object
properties:
id:
type: integer
example: 1
user_id:
type: integer
example: 1
status:
type: string
example: published
industry_type_id:
type: integer
example: 1
industry_type:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: Technology
requirement_title:
type: string
example: 'Need a Laravel Developer'
is_awarded:
type: boolean
example: false
questions:
type: array
example: []
created_at:
type: string
example: '2026-01-16T10:00:00+00:00'
updated_at:
type: string
example: '2026-01-16T10:00:00+00:00'
tags:
- Projects
security: []
'/api/v1/project/{project_id}':
put:
summary: 'Update an existing project.'
operationId: updateAnExistingProject
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Project updated successfully'
data:
id: 1
user_id: 1
status: draft
industry_type_id: 1
requirement_title: 'Need a Laravel Developer'
requirement_type: Development
requirement_details: 'We need an experienced Laravel developer'
experience_level_years: 5
project_type: hourly
estimated_hours: 40
rate: '50.00'
amount: null
questions: []
created_at: '2026-01-16T10:00:00+00:00'
updated_at: '2026-01-16T10:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Project updated successfully'
data:
type: object
properties:
id:
type: integer
example: 1
user_id:
type: integer
example: 1
status:
type: string
example: draft
industry_type_id:
type: integer
example: 1
requirement_title:
type: string
example: 'Need a Laravel Developer'
requirement_type:
type: string
example: Development
requirement_details:
type: string
example: 'We need an experienced Laravel developer'
experience_level_years:
type: integer
example: 5
project_type:
type: string
example: hourly
estimated_hours:
type: integer
example: 40
rate:
type: string
example: '50.00'
amount:
type: string
example: null
nullable: true
questions:
type: array
example: []
created_at:
type: string
example: '2026-01-16T10:00:00+00:00'
updated_at:
type: string
example: '2026-01-16T10:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'You can only edit projects that are in draft mode.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'You can only edit projects that are in draft mode.'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Project not found'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Project not found'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
industry_type_id:
- 'The industry type id field is required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
industry_type_id:
type: array
example:
- 'The industry type id field is required.'
items:
type: string
tags:
- Projects
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
industry_type_id:
type: integer
description: 'optional The ID of the industry type.'
example: 1
requirement_type_id:
type: integer
description: 'The id of an existing record in the requirement_types table.'
example: 16
requirement_title:
type: string
description: 'optional The title of the requirement.'
example: 'Need a Laravel Developer'
requirement_details:
type: string
description: 'optional Detailed description of the requirement.'
example: 'We need an experienced Laravel developer for our project.'
experience_level_years:
type: integer
description: 'optional Required experience in years.'
example: 5
project_type:
type: string
description: 'optional The type of project. Must be "hourly" or "fixed".'
example: hourly
estimated_hours:
type: integer
description: 'required_if:project_type,hourly Estimated hours for hourly projects.'
example: 40
nullable: true
rate:
type: numeric
description: 'required_if:project_type,hourly Rate per hour for hourly projects.'
example: '50.00'
nullable: true
amount:
type: numeric
description: 'required_if:project_type,fixed Total amount for fixed projects.'
example: '2000.00'
nullable: true
is_close_bidding:
type: boolean
description: 'optional When true, project is not shown publicly and no proposal submission.'
example: false
questions:
type: array
description: 'optional Array of questions for proposal submission.'
example:
- architecto
items:
type: string
requirement_type:
type: string
description: 'optional The type of requirement.'
example: Development
patch:
summary: 'Update an existing project.'
operationId: updateAnExistingProject
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Project updated successfully'
data:
id: 1
user_id: 1
status: draft
industry_type_id: 1
requirement_title: 'Need a Laravel Developer'
requirement_type: Development
requirement_details: 'We need an experienced Laravel developer'
experience_level_years: 5
project_type: hourly
estimated_hours: 40
rate: '50.00'
amount: null
questions: []
created_at: '2026-01-16T10:00:00+00:00'
updated_at: '2026-01-16T10:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Project updated successfully'
data:
type: object
properties:
id:
type: integer
example: 1
user_id:
type: integer
example: 1
status:
type: string
example: draft
industry_type_id:
type: integer
example: 1
requirement_title:
type: string
example: 'Need a Laravel Developer'
requirement_type:
type: string
example: Development
requirement_details:
type: string
example: 'We need an experienced Laravel developer'
experience_level_years:
type: integer
example: 5
project_type:
type: string
example: hourly
estimated_hours:
type: integer
example: 40
rate:
type: string
example: '50.00'
amount:
type: string
example: null
nullable: true
questions:
type: array
example: []
created_at:
type: string
example: '2026-01-16T10:00:00+00:00'
updated_at:
type: string
example: '2026-01-16T10:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'You can only edit projects that are in draft mode.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'You can only edit projects that are in draft mode.'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Project not found'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Project not found'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
industry_type_id:
- 'The industry type id field is required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
industry_type_id:
type: array
example:
- 'The industry type id field is required.'
items:
type: string
tags:
- Projects
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
industry_type_id:
type: integer
description: 'optional The ID of the industry type.'
example: 1
requirement_type_id:
type: integer
description: 'The id of an existing record in the requirement_types table.'
example: 16
requirement_title:
type: string
description: 'optional The title of the requirement.'
example: 'Need a Laravel Developer'
requirement_details:
type: string
description: 'optional Detailed description of the requirement.'
example: 'We need an experienced Laravel developer for our project.'
experience_level_years:
type: integer
description: 'optional Required experience in years.'
example: 5
project_type:
type: string
description: 'optional The type of project. Must be "hourly" or "fixed".'
example: hourly
estimated_hours:
type: integer
description: 'required_if:project_type,hourly Estimated hours for hourly projects.'
example: 40
nullable: true
rate:
type: numeric
description: 'required_if:project_type,hourly Rate per hour for hourly projects.'
example: '50.00'
nullable: true
amount:
type: numeric
description: 'required_if:project_type,fixed Total amount for fixed projects.'
example: '2000.00'
nullable: true
is_close_bidding:
type: boolean
description: 'optional When true, project is not shown publicly and no proposal submission.'
example: false
questions:
type: array
description: 'optional Array of questions for proposal submission.'
example:
- architecto
items:
type: string
requirement_type:
type: string
description: 'optional The type of requirement.'
example: Development
delete:
summary: 'Delete a project completely.'
operationId: deleteAProjectCompletely
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Project deleted successfully'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Project deleted 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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'You can only delete your own projects.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'You can only delete your own projects.'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Project not found'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Project not found'
tags:
- Projects
get:
summary: 'Get a single published project by ID.'
operationId: getASinglePublishedProjectByID
description: 'Close-bid projects return 404 (no public view). Response includes `is_awarded` and `is_close_bidding`.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Project retrieved successfully'
data:
id: 1
user_id: 1
status: published
industry_type_id: 1
industry_type:
id: 1
name: Technology
requirement_title: 'Need a Laravel Developer'
is_awarded: false
questions: []
created_at: '2026-01-16T10:00:00+00:00'
updated_at: '2026-01-16T10:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Project retrieved successfully'
data:
type: object
properties:
id:
type: integer
example: 1
user_id:
type: integer
example: 1
status:
type: string
example: published
industry_type_id:
type: integer
example: 1
industry_type:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: Technology
requirement_title:
type: string
example: 'Need a Laravel Developer'
is_awarded:
type: boolean
example: false
questions:
type: array
example: []
created_at:
type: string
example: '2026-01-16T10:00:00+00:00'
updated_at:
type: string
example: '2026-01-16T10:00:00+00:00'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Project not found'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Project not found'
tags:
- Projects
security: []
parameters:
-
in: path
name: project_id
description: 'The ID of the project.'
example: 16
required: true
schema:
type: integer
'/api/v1/project/{project_id}/publish':
post:
summary: 'Publish a draft project.'
operationId: publishADraftProject
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Project published successfully'
data:
id: 1
user_id: 1
status: published
industry_type_id: 1
requirement_title: 'Need a Laravel Developer'
requirement_type: Development
requirement_details: 'We need an experienced Laravel developer'
experience_level_years: 5
project_type: hourly
estimated_hours: 40
rate: '50.00'
amount: null
questions: []
created_at: '2026-01-16T10:00:00+00:00'
updated_at: '2026-01-16T10:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Project published successfully'
data:
type: object
properties:
id:
type: integer
example: 1
user_id:
type: integer
example: 1
status:
type: string
example: published
industry_type_id:
type: integer
example: 1
requirement_title:
type: string
example: 'Need a Laravel Developer'
requirement_type:
type: string
example: Development
requirement_details:
type: string
example: 'We need an experienced Laravel developer'
experience_level_years:
type: integer
example: 5
project_type:
type: string
example: hourly
estimated_hours:
type: integer
example: 40
rate:
type: string
example: '50.00'
amount:
type: string
example: null
nullable: true
questions:
type: array
example: []
created_at:
type: string
example: '2026-01-16T10:00:00+00:00'
updated_at:
type: string
example: '2026-01-16T10:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'You can only publish your own projects.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'You can only publish your own projects.'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Project not found'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Project not found'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Project is already published.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Project is already published.'
tags:
- Projects
parameters:
-
in: path
name: project_id
description: 'The ID of the project.'
example: 16
required: true
schema:
type: integer
'/api/v1/project/{project_id}/cancel':
post:
summary: 'Cancel a project.'
operationId: cancelAProject
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Project cancelled successfully'
data:
id: 1
user_id: 1
status: cancelled
industry_type_id: 1
requirement_title: 'Need a Laravel Developer'
requirement_type: Development
requirement_details: 'We need an experienced Laravel developer'
experience_level_years: 5
project_type: hourly
estimated_hours: 40
rate: '50.00'
amount: null
questions: []
created_at: '2026-01-16T10:00:00+00:00'
updated_at: '2026-01-16T10:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Project cancelled successfully'
data:
type: object
properties:
id:
type: integer
example: 1
user_id:
type: integer
example: 1
status:
type: string
example: cancelled
industry_type_id:
type: integer
example: 1
requirement_title:
type: string
example: 'Need a Laravel Developer'
requirement_type:
type: string
example: Development
requirement_details:
type: string
example: 'We need an experienced Laravel developer'
experience_level_years:
type: integer
example: 5
project_type:
type: string
example: hourly
estimated_hours:
type: integer
example: 40
rate:
type: string
example: '50.00'
amount:
type: string
example: null
nullable: true
questions:
type: array
example: []
created_at:
type: string
example: '2026-01-16T10:00:00+00:00'
updated_at:
type: string
example: '2026-01-16T10:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'You can only cancel your own projects.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'You can only cancel your own projects.'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Project not found'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Project not found'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Project is already cancelled.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Project is already cancelled.'
tags:
- Projects
parameters:
-
in: path
name: project_id
description: 'The ID of the project.'
example: 16
required: true
schema:
type: integer
'/api/v1/project/{project_id}/close-bidding':
post:
summary: 'Close bidding on a project. Project is hidden from public listing and single view; no proposal submission.'
operationId: closeBiddingOnAProjectProjectIsHiddenFromPublicListingAndSingleViewNoProposalSubmission
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Bidding closed successfully'
data: { }
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Bidding closed successfully'
data:
type: object
properties: { }
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: 'You can only manage your own projects.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'You can only manage your own projects.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Bidding is already closed for this project.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Bidding is already closed for this project.'
tags:
- Projects
parameters:
-
in: path
name: project_id
description: 'The ID of the project.'
example: 16
required: true
schema:
type: integer
-
in: path
name: project
description: 'The ID of the project.'
example: 1
required: true
schema:
type: integer
'/api/v1/project/{project_id}/open-bidding':
post:
summary: 'Open bidding on a project. Project is visible publicly and can receive proposals (if published and not awarded).'
operationId: openBiddingOnAProjectProjectIsVisiblePubliclyAndCanReceiveProposalsifPublishedAndNotAwarded
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Bidding opened successfully'
data: { }
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Bidding opened successfully'
data:
type: object
properties: { }
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: 'You can only manage your own projects.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'You can only manage your own projects.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Bidding is already open for this project.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Bidding is already open for this project.'
tags:
- Projects
parameters:
-
in: path
name: project_id
description: 'The ID of the project.'
example: 16
required: true
schema:
type: integer
-
in: path
name: project
description: 'The ID of the project.'
example: 1
required: true
schema:
type: integer
'/api/v1/project/{project_id}/review-expert':
post:
summary: 'Submit a review for the expert who worked on this completed project.'
operationId: submitAReviewForTheExpertWhoWorkedOnThisCompletedProject
description: 'Only the owning company can submit one review per project after completion.'
parameters: []
responses:
201:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Review submitted successfully'
data:
id: 1
project_id: 1
expert_id: 2
company_id: 1
rating: 5
message: 'Great work'
created_at: '2026-03-12T10:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Review submitted successfully'
data:
type: object
properties:
id:
type: integer
example: 1
project_id:
type: integer
example: 1
expert_id:
type: integer
example: 2
company_id:
type: integer
example: 1
rating:
type: integer
example: 5
message:
type: string
example: 'Great work'
created_at:
type: string
example: '2026-03-12T10:00:00+00:00'
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'You can only review your own completed projects.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'You can only review your own completed projects.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Project must be completed and awarded before reviewing.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Project must be completed and awarded before reviewing.'
tags:
- Projects
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
rating:
type: integer
description: 'Rating between 1 and 5.'
example: 5
message:
type: string
description: 'optional Review message.'
example: 'Great work and communication throughout the project.'
nullable: true
required:
- rating
parameters:
-
in: path
name: project_id
description: 'The ID of the project.'
example: 16
required: true
schema:
type: integer
'/api/v1/project/industry-type/{industry_type_id}':
get:
summary: 'List all published projects for a specific industry type (excludes close-bid and awarded projects).'
operationId: listAllPublishedProjectsForASpecificIndustryTypeexcludesCloseBidAndAwardedProjects
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Published projects retrieved successfully'
data:
-
id: 1
user_id: 1
status: published
industry_type_id: 1
industry_type:
id: 1
name: Technology
requirement_title: 'Need a Laravel Developer'
is_awarded: false
questions: []
created_at: '2026-01-16T10:00:00+00:00'
updated_at: '2026-01-16T10:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Published projects retrieved successfully'
data:
type: array
example:
-
id: 1
user_id: 1
status: published
industry_type_id: 1
industry_type:
id: 1
name: Technology
requirement_title: 'Need a Laravel Developer'
is_awarded: false
questions: []
created_at: '2026-01-16T10:00:00+00:00'
updated_at: '2026-01-16T10:00:00+00:00'
items:
type: object
properties:
id:
type: integer
example: 1
user_id:
type: integer
example: 1
status:
type: string
example: published
industry_type_id:
type: integer
example: 1
industry_type:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: Technology
requirement_title:
type: string
example: 'Need a Laravel Developer'
is_awarded:
type: boolean
example: false
questions:
type: array
example: []
created_at:
type: string
example: '2026-01-16T10:00:00+00:00'
updated_at:
type: string
example: '2026-01-16T10:00:00+00:00'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Industry type not found'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Industry type not found'
tags:
- Projects
security: []
parameters:
-
in: path
name: industry_type_id
description: 'The ID of the industry type.'
example: 1
required: true
schema:
type: integer
/api/v1/project/my-applied-projects:
get:
summary: 'List all projects the logged-in expert has submitted a proposal to.'
operationId: listAllProjectsTheLoggedInExpertHasSubmittedAProposalTo
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Projects you applied to retrieved successfully'
data:
-
id: 1
user_id: 1
status: published
industry_type_id: 1
industry_type:
id: 1
name: Technology
requirement_title: 'Need a Laravel Developer'
requirement_type: Development
requirement_details: 'We need an experienced Laravel developer'
experience_level_years: 5
project_type: hourly
estimated_hours: 40
rate: '50.00'
amount: null
questions: []
created_at: '2026-01-16T10:00:00+00:00'
updated_at: '2026-01-16T10:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Projects you applied to retrieved successfully'
data:
type: array
example:
-
id: 1
user_id: 1
status: published
industry_type_id: 1
industry_type:
id: 1
name: Technology
requirement_title: 'Need a Laravel Developer'
requirement_type: Development
requirement_details: 'We need an experienced Laravel developer'
experience_level_years: 5
project_type: hourly
estimated_hours: 40
rate: '50.00'
amount: null
questions: []
created_at: '2026-01-16T10:00:00+00:00'
updated_at: '2026-01-16T10:00:00+00:00'
items:
type: object
properties:
id:
type: integer
example: 1
user_id:
type: integer
example: 1
status:
type: string
example: published
industry_type_id:
type: integer
example: 1
industry_type:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: Technology
requirement_title:
type: string
example: 'Need a Laravel Developer'
requirement_type:
type: string
example: Development
requirement_details:
type: string
example: 'We need an experienced Laravel developer'
experience_level_years:
type: integer
example: 5
project_type:
type: string
example: hourly
estimated_hours:
type: integer
example: 40
rate:
type: string
example: '50.00'
amount:
type: string
example: null
nullable: true
questions:
type: array
example: []
created_at:
type: string
example: '2026-01-16T10:00:00+00:00'
updated_at:
type: string
example: '2026-01-16T10:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Only experts can view projects they have applied to.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Only experts can view projects they have applied to.'
tags:
- Proposals
'/api/v1/project/my-applied-projects/{project_id}':
get:
summary: 'Get a single project the logged-in expert has submitted a proposal to.'
operationId: getASingleProjectTheLoggedInExpertHasSubmittedAProposalTo
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Project retrieved successfully'
data:
id: 1
user_id: 1
status: published
industry_type_id: 1
industry_type:
id: 1
name: Technology
requirement_title: 'Need a Laravel Developer'
requirement_type: Development
requirement_details: 'We need an experienced Laravel developer'
experience_level_years: 5
project_type: hourly
estimated_hours: 40
rate: '50.00'
amount: null
questions: []
created_at: '2026-01-16T10:00:00+00:00'
updated_at: '2026-01-16T10:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Project retrieved successfully'
data:
type: object
properties:
id:
type: integer
example: 1
user_id:
type: integer
example: 1
status:
type: string
example: published
industry_type_id:
type: integer
example: 1
industry_type:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: Technology
requirement_title:
type: string
example: 'Need a Laravel Developer'
requirement_type:
type: string
example: Development
requirement_details:
type: string
example: 'We need an experienced Laravel developer'
experience_level_years:
type: integer
example: 5
project_type:
type: string
example: hourly
estimated_hours:
type: integer
example: 40
rate:
type: string
example: '50.00'
amount:
type: string
example: null
nullable: true
questions:
type: array
example: []
created_at:
type: string
example: '2026-01-16T10:00:00+00:00'
updated_at:
type: string
example: '2026-01-16T10:00:00+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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Only experts can view projects they have applied to.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Only experts can view projects they have applied to.'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Project not found or you have not applied to this project.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Project not found or you have not applied to this project.'
tags:
- Proposals
parameters:
-
in: path
name: project_id
description: 'The ID of the project.'
example: 16
required: true
schema:
type: integer
-
in: path
name: project
description: 'The ID of the project.'
example: 1
required: true
schema:
type: integer
/api/v1/project/proposals:
get:
summary: 'List proposals for the authenticated user.'
operationId: listProposalsForTheAuthenticatedUser
description: "Experts: proposals they submitted. Companies: not used; use indexByProject for their project's proposals."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Proposals retrieved successfully'
data: []
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Proposals retrieved successfully'
data:
type: array
example: []
tags:
- Proposals
'/api/v1/project/proposal/{proposal_id}':
get:
summary: 'Show a single proposal. Visible to the expert who submitted it or the company that owns the project.'
operationId: showASingleProposalVisibleToTheExpertWhoSubmittedItOrTheCompanyThatOwnsTheProject
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Proposal retrieved successfully'
data: { }
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Proposal retrieved successfully'
data:
type: object
properties: { }
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Proposal not found'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Proposal not found'
tags:
- Proposals
parameters:
-
in: path
name: proposal_id
description: 'The ID of the proposal.'
example: 16
required: true
schema:
type: integer
'/api/v1/project/proposal/{proposal_id}/award':
post:
summary: 'Award the project to an expert (company only - project owner).'
operationId: awardTheProjectToAnExpertcompanyOnlyProjectOwner
description: 'Sets the proposal as "pending" until the expert accepts or declines.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Project awarded to expert successfully. Waiting for expert response.'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Project awarded to expert successfully. Waiting for expert response.'
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'You can only award proposals for your own projects.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'You can only award proposals for your own projects.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'This project has already been awarded to an expert.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'This project has already been awarded to an expert.'
tags:
- Proposals
parameters:
-
in: path
name: proposal_id
description: 'The ID of the proposal.'
example: 16
required: true
schema:
type: integer
'/api/v1/project/proposal/{proposal_id}/accept-award':
post:
summary: 'Expert accepts the award. Project is then awarded to this expert and proposal submission is closed.'
operationId: expertAcceptsTheAwardProjectIsThenAwardedToThisExpertAndProposalSubmissionIsClosed
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'You have accepted the award. The project is now awarded to you.'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'You have accepted the award. The project is now awarded to you.'
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Only the expert who received the award can accept it.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Only the expert who received the award can accept it.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'This proposal is not pending your response.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'This proposal is not pending your response.'
tags:
- Proposals
parameters:
-
in: path
name: proposal_id
description: 'The ID of the proposal.'
example: 16
required: true
schema:
type: integer
'/api/v1/project/proposal/{proposal_id}/decline-award':
post:
summary: 'Expert declines the award. Proposal submission for the project continues; company can see the decline.'
operationId: expertDeclinesTheAwardProposalSubmissionForTheProjectContinuesCompanyCanSeeTheDecline
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'You have declined the award.'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'You have declined the award.'
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Only the expert who received the award can decline it.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Only the expert who received the award can decline it.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'This proposal is not pending your response.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'This proposal is not pending your response.'
tags:
- Proposals
parameters:
-
in: path
name: proposal_id
description: 'The ID of the proposal.'
example: 16
required: true
schema:
type: integer
'/api/v1/project/{project_id}/proposal-form':
get:
summary: 'Get proposal form data for a project (when expert clicks "Apply now").'
operationId: getProposalFormDataForAProjectwhenExpertClicksApplyNow
description: 'Returns project details and questions so the frontend can render the proposal form.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Proposal form retrieved successfully'
data:
project: { }
questions: []
already_submitted: false
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Proposal form retrieved successfully'
data:
type: object
properties:
project:
type: object
properties: { }
questions:
type: array
example: []
already_submitted:
type: boolean
example: false
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Only published projects can receive proposals.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Only published projects can receive proposals.'
tags:
- Proposals
parameters:
-
in: path
name: project_id
description: 'The ID of the project.'
example: 16
required: true
schema:
type: integer
'/api/v1/project/{project_id}/proposals':
get:
summary: 'List proposals for a project (company only - project owner).'
operationId: listProposalsForAProjectcompanyOnlyProjectOwner
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Proposals retrieved successfully'
data: []
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Proposals retrieved successfully'
data:
type: array
example: []
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'You can only view proposals for your own projects.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'You can only view proposals for your own projects.'
tags:
- Proposals
parameters:
-
in: path
name: project_id
description: 'The ID of the project.'
example: 16
required: true
schema:
type: integer
'/api/v1/project/{project_id}/proposal':
post:
summary: 'Submit a proposal for a published project.'
operationId: submitAProposalForAPublishedProject
description: ''
parameters: []
responses:
201:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Proposal submitted successfully'
data: { }
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Proposal submitted successfully'
data:
type: object
properties: { }
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Only experts can submit proposals.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Only experts can submit proposals.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'You have already submitted a proposal for this project.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'You have already submitted a proposal for this project.'
tags:
- Proposals
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
heading:
type: string
description: 'Proposal heading.'
example: 'My approach to your Laravel project'
cover_letter:
type: string
description: 'Cover letter.'
example: 'I have 5 years of experience...'
work_samples:
type: array
description: 'optional Work samples (pdf, video, link, image).'
example:
- architecto
items:
type: string
question_answers:
type: array
description: 'Answers to all project questions.'
example:
- architecto
items:
type: string
estimated_total_hours:
type: integer
description: 'required_if:project_type,hourly Total hours (hourly projects).'
example: 40
nullable: true
estimated_rate:
type: number
description: 'required_if:project_type,hourly Rate per hour (hourly projects).'
example: 50.0
nullable: true
estimated_amount:
type: number
description: 'required_if:project_type,fixed Total price (fixed projects).'
example: 2000.0
nullable: true
required:
- heading
- cover_letter
- question_answers
parameters:
-
in: path
name: project_id
description: 'The ID of the project.'
example: 16
required: true
schema:
type: integer
/api/v1/about-page:
get:
summary: 'Get public about page content.'
operationId: getPublicAboutPageContent
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'About page content retrieved successfully'
data:
id: 1
page_title: 'About Us'
side_image: 'http://localhost/images/about/side.jpg'
heading: Welcome
description: Description
our_mission_text: 'Mission text'
our_vision_text: 'Vision text'
our_values_text: 'Values text'
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'About page content retrieved successfully'
data:
type: object
properties:
id:
type: integer
example: 1
page_title:
type: string
example: 'About Us'
side_image:
type: string
example: 'http://localhost/images/about/side.jpg'
heading:
type: string
example: Welcome
description:
type: string
example: Description
our_mission_text:
type: string
example: 'Mission text'
our_vision_text:
type: string
example: 'Vision text'
our_values_text:
type: string
example: 'Values text'
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+00:00'
tags:
- 'Public About Page'
security: []
/api/v1/blog-categories:
get:
summary: 'Get active blog categories with blog counts.'
operationId: getActiveBlogCategoriesWithBlogCounts
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Blog categories retrieved'
data:
-
id: 1
name: Technology
is_active: true
blogs_count: 3
created_at: '2026-01-21T12:00:00+00:00'
updated_at: '2026-01-21T12:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Blog categories retrieved'
data:
type: array
example:
-
id: 1
name: Technology
is_active: true
blogs_count: 3
created_at: '2026-01-21T12:00:00+00:00'
updated_at: '2026-01-21T12:00:00+00:00'
items:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: Technology
is_active:
type: boolean
example: true
blogs_count:
type: integer
example: 3
created_at:
type: string
example: '2026-01-21T12:00:00+00:00'
updated_at:
type: string
example: '2026-01-21T12:00:00+00:00'
tags:
- 'Public Blogs'
security: []
'/api/v1/blog-categories/{id}':
get:
summary: 'Show a single active category.'
operationId: showASingleActiveCategory
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Blog category retrieved'
data:
id: 1
name: Technology
is_active: true
blogs_count: 3
created_at: '2026-01-21T12:00:00+00:00'
updated_at: '2026-01-21T12:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Blog category retrieved'
data:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: Technology
is_active:
type: boolean
example: true
blogs_count:
type: integer
example: 3
created_at:
type: string
example: '2026-01-21T12:00:00+00:00'
updated_at:
type: string
example: '2026-01-21T12:00:00+00:00'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Blog category not found'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Blog category not found'
tags:
- 'Public Blogs'
security: []
parameters:
-
in: path
name: id
description: 'The category ID.'
example: 1
required: true
schema:
type: integer
/api/v1/blogs:
get:
summary: 'List active blogs with optional category filter.'
operationId: listActiveBlogsWithOptionalCategoryFilter
description: ''
parameters:
-
in: query
name: category_id
description: 'optional Filter by category ID.'
example: 2
required: false
schema:
type: integer
description: 'optional Filter by category ID.'
example: 2
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Blogs retrieved'
data:
-
id: 1
name: 'Launch Update'
blog_category_id: 2
category:
id: 2
name: News
is_active: true
blogs_count: 1
thumbnail_image: 'https://cdn/img.png'
description: ...
share_facebook: true
share_twitter: false
share_linkedin: true
is_active: true
sections:
-
id: 1
heading: Intro
description: ...
image: null
position: left
button_name: null
button_url: null
order: 0
created_at: '2026-01-21T12:00:00+00:00'
updated_at: '2026-01-21T12:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Blogs retrieved'
data:
type: array
example:
-
id: 1
name: 'Launch Update'
blog_category_id: 2
category:
id: 2
name: News
is_active: true
blogs_count: 1
thumbnail_image: 'https://cdn/img.png'
description: ...
share_facebook: true
share_twitter: false
share_linkedin: true
is_active: true
sections:
-
id: 1
heading: Intro
description: ...
image: null
position: left
button_name: null
button_url: null
order: 0
created_at: '2026-01-21T12:00:00+00:00'
updated_at: '2026-01-21T12:00:00+00:00'
items:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'Launch Update'
blog_category_id:
type: integer
example: 2
category:
type: object
properties:
id:
type: integer
example: 2
name:
type: string
example: News
is_active:
type: boolean
example: true
blogs_count:
type: integer
example: 1
thumbnail_image:
type: string
example: 'https://cdn/img.png'
description:
type: string
example: ...
share_facebook:
type: boolean
example: true
share_twitter:
type: boolean
example: false
share_linkedin:
type: boolean
example: true
is_active:
type: boolean
example: true
sections:
type: array
example:
-
id: 1
heading: Intro
description: ...
image: null
position: left
button_name: null
button_url: null
order: 0
items:
type: object
properties:
id:
type: integer
example: 1
heading:
type: string
example: Intro
description:
type: string
example: ...
image:
type: string
example: null
nullable: true
position:
type: string
example: left
button_name:
type: string
example: null
nullable: true
button_url:
type: string
example: null
nullable: true
order:
type: integer
example: 0
created_at:
type: string
example: '2026-01-21T12:00:00+00:00'
updated_at:
type: string
example: '2026-01-21T12:00:00+00:00'
tags:
- 'Public Blogs'
security: []
'/api/v1/blogs/{slug}':
get:
summary: 'Show a single active blog.'
operationId: showASingleActiveBlog
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Blog retrieved'
data:
id: 1
name: 'Launch Update'
slug: launch-update
blog_category_id: 2
category:
id: 2
name: News
is_active: true
blogs_count: 1
thumbnail_image: 'https://cdn/img.png'
description: ...
share_facebook: true
share_twitter: false
share_linkedin: true
is_active: true
sections:
-
id: 1
heading: Intro
description: ...
image: null
position: left
button_name: null
button_url: null
order: 0
created_at: '2026-01-21T12:00:00+00:00'
updated_at: '2026-01-21T12:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Blog retrieved'
data:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'Launch Update'
slug:
type: string
example: launch-update
blog_category_id:
type: integer
example: 2
category:
type: object
properties:
id:
type: integer
example: 2
name:
type: string
example: News
is_active:
type: boolean
example: true
blogs_count:
type: integer
example: 1
thumbnail_image:
type: string
example: 'https://cdn/img.png'
description:
type: string
example: ...
share_facebook:
type: boolean
example: true
share_twitter:
type: boolean
example: false
share_linkedin:
type: boolean
example: true
is_active:
type: boolean
example: true
sections:
type: array
example:
-
id: 1
heading: Intro
description: ...
image: null
position: left
button_name: null
button_url: null
order: 0
items:
type: object
properties:
id:
type: integer
example: 1
heading:
type: string
example: Intro
description:
type: string
example: ...
image:
type: string
example: null
nullable: true
position:
type: string
example: left
button_name:
type: string
example: null
nullable: true
button_url:
type: string
example: null
nullable: true
order:
type: integer
example: 0
created_at:
type: string
example: '2026-01-21T12:00:00+00:00'
updated_at:
type: string
example: '2026-01-21T12:00:00+00:00'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Blog not found'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Blog not found'
tags:
- 'Public Blogs'
security: []
parameters:
-
in: path
name: slug
description: 'Blog slug.'
example: launch-update
required: true
schema:
type: string
/api/v1/company:
get:
summary: 'List all companies in the system (public endpoint).'
operationId: listAllCompaniesInTheSystempublicEndpoint
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Companies retrieved successfully'
data:
-
id: 1
name: 'Company Name'
company_name: 'Company Name'
email: company@example.com
profile:
id: 1
company_name: 'Company Name'
company_logo: 'http://localhost/logos/image.jpg'
address_line_1: '123 Main St'
country:
id: 1
name: India
state:
id: 1
name: State
city:
id: 1
name: City
created_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Companies retrieved successfully'
data:
type: array
example:
-
id: 1
name: 'Company Name'
company_name: 'Company Name'
email: company@example.com
profile:
id: 1
company_name: 'Company Name'
company_logo: 'http://localhost/logos/image.jpg'
address_line_1: '123 Main St'
country:
id: 1
name: India
state:
id: 1
name: State
city:
id: 1
name: City
created_at: '2024-01-01T00:00:00+00:00'
items:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'Company Name'
company_name:
type: string
example: 'Company Name'
email:
type: string
example: company@example.com
profile:
type: object
properties:
id:
type: integer
example: 1
company_name:
type: string
example: 'Company Name'
company_logo:
type: string
example: 'http://localhost/logos/image.jpg'
address_line_1:
type: string
example: '123 Main St'
country:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: India
state:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: State
city:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: City
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
tags:
- 'Public Company'
security: []
/api/v1/company/check-email:
get:
summary: 'Check if the given email exists in the system as a company.'
operationId: checkIfTheGivenEmailExistsInTheSystemAsACompany
description: ''
parameters:
-
in: query
name: email
description: 'The email address to check.'
example: company@example.com
required: true
schema:
type: string
description: 'The email address to check.'
example: company@example.com
responses:
200:
description: ''
content:
application/json:
schema:
oneOf:
-
description: ''
type: object
example:
success: true
message: OK
data:
exists: true
properties:
success:
type: boolean
example: true
message:
type: string
example: OK
data:
type: object
properties:
exists:
type: boolean
example: true
-
description: ''
type: object
example:
success: true
message: OK
data:
exists: false
properties:
success:
type: boolean
example: true
message:
type: string
example: OK
data:
type: object
properties:
exists:
type: boolean
example: false
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'The given data was invalid.'
errors:
email:
- 'The email field is required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'The given data was invalid.'
errors:
type: object
properties:
email:
type: array
example:
- 'The email field is required.'
items:
type: string
tags:
- 'Public Company'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
email:
type: string
description: 'Must be a valid email address. Must not be greater than 255 characters.'
example: gbailey@example.net
required:
- email
security: []
/api/v1/expert:
get:
summary: 'List all experts in the system (public endpoint).'
operationId: listAllExpertsInTheSystempublicEndpoint
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Experts retrieved successfully'
data:
-
id: 1
name: 'John Doe'
first_name: John
last_name: Doe
email: expert@example.com
profile:
id: 1
designation:
id: 1
name: Developer
experience: 5
bio: 'Expert in software development'
profile_image: 'http://localhost/profiles/image.jpg'
country:
id: 1
name: India
created_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Experts retrieved successfully'
data:
type: array
example:
-
id: 1
name: 'John Doe'
first_name: John
last_name: Doe
email: expert@example.com
profile:
id: 1
designation:
id: 1
name: Developer
experience: 5
bio: 'Expert in software development'
profile_image: 'http://localhost/profiles/image.jpg'
country:
id: 1
name: India
created_at: '2024-01-01T00:00:00+00:00'
items:
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: expert@example.com
profile:
type: object
properties:
id:
type: integer
example: 1
designation:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: Developer
experience:
type: integer
example: 5
bio:
type: string
example: 'Expert in software development'
profile_image:
type: string
example: 'http://localhost/profiles/image.jpg'
country:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: India
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
tags:
- 'Public Expert'
security: []
'/api/v1/expert/{id}':
get:
summary: 'Get a single expert by ID (public endpoint).'
operationId: getASingleExpertByIDpublicEndpoint
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Expert retrieved successfully'
data:
id: 1
name: 'John Doe'
first_name: John
last_name: Doe
email: expert@example.com
profile:
id: 1
designation:
id: 1
name: Developer
experience: 5
bio: 'Expert in software development'
profile_image: 'http://localhost/profiles/image.jpg'
country:
id: 1
name: India
created_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Expert retrieved successfully'
data:
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: expert@example.com
profile:
type: object
properties:
id:
type: integer
example: 1
designation:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: Developer
experience:
type: integer
example: 5
bio:
type: string
example: 'Expert in software development'
profile_image:
type: string
example: 'http://localhost/profiles/image.jpg'
country:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: India
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Expert not found.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Expert not found.'
tags:
- 'Public Expert'
security: []
parameters:
-
in: path
name: id
description: 'The expert user ID.'
example: 1
required: true
schema:
type: integer
/api/v1/faq/company:
get:
summary: 'Get all company FAQs (Public).'
operationId: getAllCompanyFAQsPublic
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Company FAQs retrieved'
data:
-
id: 1
heading: 'Question 1'
description: 'Answer 1'
order: 0
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Company FAQs retrieved'
data:
type: array
example:
-
id: 1
heading: 'Question 1'
description: 'Answer 1'
order: 0
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
items:
type: object
properties:
id:
type: integer
example: 1
heading:
type: string
example: 'Question 1'
description:
type: string
example: 'Answer 1'
order:
type: integer
example: 0
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+00:00'
tags:
- 'Public FAQs'
security: []
/api/v1/faq/expert:
get:
summary: 'Get all expert FAQs (Public).'
operationId: getAllExpertFAQsPublic
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Expert FAQs retrieved'
data:
-
id: 1
heading: 'Question 1'
description: 'Answer 1'
order: 0
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Expert FAQs retrieved'
data:
type: array
example:
-
id: 1
heading: 'Question 1'
description: 'Answer 1'
order: 0
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
items:
type: object
properties:
id:
type: integer
example: 1
heading:
type: string
example: 'Question 1'
description:
type: string
example: 'Answer 1'
order:
type: integer
example: 0
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+00:00'
tags:
- 'Public FAQs'
security: []
/api/v1/home-page:
get:
summary: 'Get public home page content.'
operationId: getPublicHomePageContent
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Home page content retrieved successfully'
data:
id: 1
section1:
hero_headline: Welcome
hero_description: Description
hero_image: 'http://localhost/images/hero.jpg'
section2:
headline: 'Section 2'
section3:
headline: 'Section 3'
description: Description
button_name: Click
button_url: 'https://example.com'
image: 'http://localhost/images/section3.jpg'
section4:
headline: 'Section 4'
options:
-
image: 'http://localhost/images/option1.jpg'
title: 'Option 1'
description: 'Description 1'
section5:
steps:
-
title: 'Step 1'
description: 'Description 1'
section6:
headline: 'Section 6'
button_name: Click
button_url: 'https://example.com'
background_image: 'http://localhost/images/bg.jpg'
section7:
headline: 'Section 7'
description: Description
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Home page content retrieved successfully'
data:
type: object
properties:
id:
type: integer
example: 1
section1:
type: object
properties:
hero_headline:
type: string
example: Welcome
hero_description:
type: string
example: Description
hero_image:
type: string
example: 'http://localhost/images/hero.jpg'
section2:
type: object
properties:
headline:
type: string
example: 'Section 2'
section3:
type: object
properties:
headline:
type: string
example: 'Section 3'
description:
type: string
example: Description
button_name:
type: string
example: Click
button_url:
type: string
example: 'https://example.com'
image:
type: string
example: 'http://localhost/images/section3.jpg'
section4:
type: object
properties:
headline:
type: string
example: 'Section 4'
options:
type: array
example:
-
image: 'http://localhost/images/option1.jpg'
title: 'Option 1'
description: 'Description 1'
items:
type: object
properties:
image:
type: string
example: 'http://localhost/images/option1.jpg'
title:
type: string
example: 'Option 1'
description:
type: string
example: 'Description 1'
section5:
type: object
properties:
steps:
type: array
example:
-
title: 'Step 1'
description: 'Description 1'
items:
type: object
properties:
title:
type: string
example: 'Step 1'
description:
type: string
example: 'Description 1'
section6:
type: object
properties:
headline:
type: string
example: 'Section 6'
button_name:
type: string
example: Click
button_url:
type: string
example: 'https://example.com'
background_image:
type: string
example: 'http://localhost/images/bg.jpg'
section7:
type: object
properties:
headline:
type: string
example: 'Section 7'
description:
type: string
example: Description
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+00:00'
tags:
- 'Public Home Page'
security: []
/api/v1/policies/privacy-policy:
get:
summary: 'Get privacy policy.'
operationId: getPrivacyPolicy
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Privacy policy retrieved successfully'
data:
id: 1
type: privacy_policy
content: 'Privacy policy content here...'
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Privacy policy retrieved successfully'
data:
type: object
properties:
id:
type: integer
example: 1
type:
type: string
example: privacy_policy
content:
type: string
example: 'Privacy policy content here...'
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+00:00'
tags:
- 'Public Policies'
security: []
/api/v1/policies/terms-conditions:
get:
summary: 'Get terms & conditions.'
operationId: getTermsConditions
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Terms & conditions retrieved successfully'
data:
id: 2
type: terms_conditions
content: 'Terms & conditions content here...'
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Terms & conditions retrieved successfully'
data:
type: object
properties:
id:
type: integer
example: 2
type:
type: string
example: terms_conditions
content:
type: string
example: 'Terms & conditions content here...'
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+00:00'
tags:
- 'Public Policies'
security: []
/api/v1/policies/refund-cancellation:
get:
summary: 'Get refund & cancellation policy.'
operationId: getRefundCancellationPolicy
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Refund & cancellation policy retrieved successfully'
data:
id: 3
type: refund_cancellation
content: 'Refund & cancellation policy content here...'
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Refund & cancellation policy retrieved successfully'
data:
type: object
properties:
id:
type: integer
example: 3
type:
type: string
example: refund_cancellation
content:
type: string
example: 'Refund & cancellation policy content here...'
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+00:00'
tags:
- 'Public Policies'
security: []
/api/v1/site-settings:
get:
summary: 'Get public site settings.'
operationId: getPublicSiteSettings
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Site settings retrieved successfully'
data:
id: 1
favicon: 'http://localhost/favicon.ico'
logo: 'http://localhost/logos/logo.png'
footer_logo: 'http://localhost/logos/footer-logo.png'
footer_description: 'Company description'
address: '123 Main St'
email: info@example.com
phone: '1234567890'
phone_country_code: '+1'
facebook_url: 'https://facebook.com/company'
instagram_url: 'https://instagram.com/company'
linkedin_url: 'https://linkedin.com/company'
copyright: '© 2024 Company'
header_image: 'http://localhost/images/header.jpg'
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00: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/favicon.ico'
logo:
type: string
example: 'http://localhost/logos/logo.png'
footer_logo:
type: string
example: 'http://localhost/logos/footer-logo.png'
footer_description:
type: string
example: 'Company description'
address:
type: string
example: '123 Main St'
email:
type: string
example: info@example.com
phone:
type: string
example: '1234567890'
phone_country_code:
type: string
example: '+1'
facebook_url:
type: string
example: 'https://facebook.com/company'
instagram_url:
type: string
example: 'https://instagram.com/company'
linkedin_url:
type: string
example: 'https://linkedin.com/company'
copyright:
type: string
example: '© 2024 Company'
header_image:
type: string
example: 'http://localhost/images/header.jpg'
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+00:00'
tags:
- 'Public Site Settings'
security: []
/api/v1/requirement-types:
get:
summary: 'Get list of all requirement types (Public endpoint for frontend users).'
operationId: getListOfAllRequirementTypesPublicEndpointForFrontendUsers
description: ''
parameters:
-
in: query
name: is_active
description: 'Filter by active status.'
example: true
required: false
schema:
type: boolean
description: 'Filter by active status.'
example: true
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Requirement types retrieved successfully'
data:
-
id: 1
name: Consulting
description: 'Consulting requirement'
image: 'http://localhost/requirement-types/consulting.jpg'
is_active: true
created_at: '2024-01-16 03:26:06'
updated_at: '2024-01-16 03:26:06'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Requirement types retrieved successfully'
data:
type: array
example:
-
id: 1
name: Consulting
description: 'Consulting requirement'
image: 'http://localhost/requirement-types/consulting.jpg'
is_active: true
created_at: '2024-01-16 03:26:06'
updated_at: '2024-01-16 03:26:06'
items:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: Consulting
description:
type: string
example: 'Consulting requirement'
image:
type: string
example: 'http://localhost/requirement-types/consulting.jpg'
is_active:
type: boolean
example: true
created_at:
type: string
example: '2024-01-16 03:26:06'
updated_at:
type: string
example: '2024-01-16 03:26:06'
tags:
- 'Requirement Type'
security: []
/api/v1/admin/requirement-types:
get:
summary: 'Get list of all requirement types (Admin only).'
operationId: getListOfAllRequirementTypesAdminOnly
description: ''
parameters:
-
in: query
name: is_active
description: 'Filter by active status.'
example: true
required: false
schema:
type: boolean
description: 'Filter by active status.'
example: true
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Requirement types retrieved successfully'
data:
-
id: 1
name: Consulting
description: 'Consulting requirement'
image: 'http://localhost/requirement-types/consulting.jpg'
is_active: true
created_at: '2024-01-16 03:26:06'
updated_at: '2024-01-16 03:26:06'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Requirement types retrieved successfully'
data:
type: array
example:
-
id: 1
name: Consulting
description: 'Consulting requirement'
image: 'http://localhost/requirement-types/consulting.jpg'
is_active: true
created_at: '2024-01-16 03:26:06'
updated_at: '2024-01-16 03:26:06'
items:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: Consulting
description:
type: string
example: 'Consulting requirement'
image:
type: string
example: 'http://localhost/requirement-types/consulting.jpg'
is_active:
type: boolean
example: true
created_at:
type: string
example: '2024-01-16 03:26:06'
updated_at:
type: string
example: '2024-01-16 03:26:06'
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: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
tags:
- 'Requirement Type'
post:
summary: 'Store a new requirement type (Admin only).'
operationId: storeANewRequirementTypeAdminOnly
description: ''
parameters: []
responses:
201:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Requirement type created successfully'
data:
id: 1
name: Consulting
description: 'Consulting requirement'
image: 'http://localhost/requirement-types/consulting.jpg'
is_active: true
created_at: '2024-01-16 03:26:06'
updated_at: '2024-01-16 03:26:06'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Requirement type created successfully'
data:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: Consulting
description:
type: string
example: 'Consulting requirement'
image:
type: string
example: 'http://localhost/requirement-types/consulting.jpg'
is_active:
type: boolean
example: true
created_at:
type: string
example: '2024-01-16 03:26:06'
updated_at:
type: string
example: '2024-01-16 03:26:06'
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: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
name:
- 'Name is required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
name:
type: array
example:
- 'Name is required.'
items:
type: string
tags:
- 'Requirement Type'
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
name:
type: string
description: 'The name of the requirement type.'
example: Consulting
description:
type: string
description: 'optional The description of the requirement type.'
example: 'Consulting requirement'
nullable: true
image:
type: string
format: binary
description: 'optional Requirement type image (max 2MB, jpeg/png/jpg/gif).'
nullable: true
is_active:
type: boolean
description: 'optional Whether the requirement type is active. Defaults to true.'
example: true
nullable: true
required:
- name
'/api/v1/admin/requirement-types/{id}':
put:
summary: 'Update a requirement type (Admin only).'
operationId: updateARequirementTypeAdminOnly
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Requirement type updated successfully'
data:
id: 1
name: Consulting
description: 'Consulting requirement'
image: 'http://localhost/requirement-types/consulting.jpg'
is_active: true
created_at: '2024-01-16 03:26:06'
updated_at: '2024-01-16 03:27:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Requirement type updated successfully'
data:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: Consulting
description:
type: string
example: 'Consulting requirement'
image:
type: string
example: 'http://localhost/requirement-types/consulting.jpg'
is_active:
type: boolean
example: true
created_at:
type: string
example: '2024-01-16 03:26:06'
updated_at:
type: string
example: '2024-01-16 03:27: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
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Requirement type not found.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Requirement type not found.'
422:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Validation failed'
errors:
name:
- 'Name is required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Validation failed'
errors:
type: object
properties:
name:
type: array
example:
- 'Name is required.'
items:
type: string
tags:
- 'Requirement Type'
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
name:
type: string
description: 'The name of the requirement type.'
example: Consulting
description:
type: string
description: 'optional The description of the requirement type.'
example: 'Consulting requirement'
nullable: true
image:
type: string
format: binary
description: 'optional Requirement type image (max 2MB, jpeg/png/jpg/gif).'
nullable: true
is_active:
type: boolean
description: 'optional Whether the requirement type is active.'
example: true
nullable: true
required:
- name
delete:
summary: 'Delete a requirement type (Admin only).'
operationId: deleteARequirementTypeAdminOnly
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Requirement type deleted successfully'
data: null
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Requirement type deleted successfully'
data:
type: string
example: null
nullable: 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: 'Unauthorized. Admin role required.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Unauthorized. Admin role required.'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Requirement type not found.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Requirement type not found.'
tags:
- 'Requirement Type'
parameters:
-
in: path
name: id
description: 'The ID of the requirement type.'
example: 1
required: true
schema:
type: integer
/api/v1/subscription/subscription:
get:
summary: 'Get current subscription status for authenticated user (company or expert).'
operationId: getCurrentSubscriptionStatusForAuthenticatedUsercompanyOrExpert
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Subscription retrieved successfully'
data:
id: 1
status: active
lifetime: true
starts_at: '2024-01-01T00:00:00+00:00'
ends_at: null
created_at: '2024-01-01T00:00:00+00:00'
updated_at: '2024-01-01T00:00:00+00:00'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Subscription retrieved successfully'
data:
type: object
properties:
id:
type: integer
example: 1
status:
type: string
example: active
lifetime:
type: boolean
example: true
starts_at:
type: string
example: '2024-01-01T00:00:00+00:00'
ends_at:
type: string
example: null
nullable: true
created_at:
type: string
example: '2024-01-01T00:00:00+00:00'
updated_at:
type: string
example: '2024-01-01T00:00:00+00:00'
404:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'No subscription found'
data: null
properties:
success:
type: boolean
example: false
message:
type: string
example: 'No subscription found'
data:
type: string
example: null
nullable: true
tags:
- Subscription
/api/v1/subscription/create-checkout-session:
post:
summary: 'Create Stripe checkout session for subscription.'
operationId: createStripeCheckoutSessionForSubscription
description: "This endpoint creates a checkout session in Stripe and returns the checkout URL\nwhich the frontend should redirect to. Works for both company and expert users."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Checkout session created successfully'
data:
checkout_url: 'https://checkout.stripe.com/...'
session_id: cs_xxx
amount: 9999
currency: INR
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Checkout session created successfully'
data:
type: object
properties:
checkout_url:
type: string
example: 'https://checkout.stripe.com/...'
session_id:
type: string
example: cs_xxx
amount:
type: integer
example: 9999
currency:
type: string
example: INR
400:
description: ''
content:
application/json:
schema:
oneOf:
-
description: ''
type: object
example:
success: false
message: 'Subscription configuration not found. Please contact administrator.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Subscription configuration not found. Please contact administrator.'
-
description: ''
type: object
example:
success: false
message: 'Subscription is only available for company or expert users.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Subscription is only available for company or expert users.'
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'You already have an active subscription.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'You already have an active subscription.'
tags:
- Subscription
/api/v1/subscription/create-payment-intent:
post:
summary: 'Create Stripe payment intent for subscription.'
operationId: createStripePaymentIntentForSubscription
description: "This endpoint creates a payment intent in Stripe and returns the client secret\nwhich is used by the frontend to complete the payment. Works for both company and expert users."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Payment intent created successfully'
data:
client_secret: pi_xxx_secret_xxx
payment_intent_id: pi_xxx
amount: 9999
currency: INR
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Payment intent created successfully'
data:
type: object
properties:
client_secret:
type: string
example: pi_xxx_secret_xxx
payment_intent_id:
type: string
example: pi_xxx
amount:
type: integer
example: 9999
currency:
type: string
example: INR
400:
description: ''
content:
application/json:
schema:
oneOf:
-
description: ''
type: object
example:
success: false
message: 'Subscription configuration not found. Please contact administrator.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Subscription configuration not found. Please contact administrator.'
-
description: ''
type: object
example:
success: false
message: 'Subscription is only available for company or expert users.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Subscription is only available for company or expert users.'
403:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'You already have an active subscription.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'You already have an active subscription.'
tags:
- Subscription
/api/v1/subscription/confirm-payment:
post:
summary: 'Confirm payment and activate subscription.'
operationId: confirmPaymentAndActivateSubscription
description: "This endpoint confirms the payment intent and activates the subscription\nif payment is successful. The subscription is also activated via webhook\nfor reliability, but this provides immediate feedback. Works for both company and expert users."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Payment confirmed successfully'
data:
status: succeeded
subscription_activated: true
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Payment confirmed successfully'
data:
type: object
properties:
status:
type: string
example: succeeded
subscription_activated:
type: boolean
example: true
400:
description: ''
content:
application/json:
schema:
oneOf:
-
description: ''
type: object
example:
success: false
message: 'Payment not found.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Payment not found.'
-
description: ''
type: object
example:
success: false
message: 'Failed to confirm payment: ...'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Failed to confirm payment: ...'
tags:
- Subscription
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
payment_intent_id:
type: string
description: 'The Stripe payment intent ID.'
example: pi_xxx
required:
- payment_intent_id
/api/v1/stripe/webhook:
post:
summary: 'Handle Stripe webhook events.'
operationId: handleStripeWebhookEvents
description: "This endpoint receives webhook events from Stripe and processes them.\nIt handles payment_intent.succeeded and payment_intent.payment_failed events."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
success: true
message: 'Webhook processed successfully'
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Webhook processed successfully'
400:
description: ''
content:
application/json:
schema:
type: object
example:
success: false
message: 'Invalid webhook signature.'
properties:
success:
type: boolean
example: false
message:
type: string
example: 'Invalid webhook signature.'
tags:
- Subscription
security: []
/api/v1/subscription/subscription-config:
get:
summary: 'Get subscription configuration (Public).'
operationId: getSubscriptionConfigurationPublic
description: ''
parameters:
-
in: query
name: role
description: 'optional The role to get configuration for (company or expert). If not provided, returns all configurations.'
example: architecto
required: false
schema:
type: string
description: 'optional The role to get configuration for (company or expert). If not provided, returns all configurations.'
example: architecto
responses:
200:
description: ''
content:
application/json:
schema:
oneOf:
-
description: ''
type: object
example:
success: true
message: 'Subscription configuration retrieved'
data:
role: company
price: 9999
currency: INR
validity_type: lifetime
validity_value: null
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Subscription configuration retrieved'
data:
type: object
properties:
role:
type: string
example: company
price:
type: integer
example: 9999
currency:
type: string
example: INR
validity_type:
type: string
example: lifetime
validity_value:
type: string
example: null
nullable: true
-
description: ''
type: object
example:
success: true
message: 'Subscription configurations retrieved'
data:
-
role: company
price: 9999
currency: INR
validity_type: lifetime
validity_value: null
-
role: expert
price: 4999
currency: INR
validity_type: lifetime
validity_value: null
properties:
success:
type: boolean
example: true
message:
type: string
example: 'Subscription configurations retrieved'
data:
type: array
example:
-
role: company
price: 9999
currency: INR
validity_type: lifetime
validity_value: null
-
role: expert
price: 4999
currency: INR
validity_type: lifetime
validity_value: null
items:
type: object
properties:
role:
type: string
example: company
price:
type: integer
example: 9999
currency:
type: string
example: INR
validity_type:
type: string
example: lifetime
validity_value:
type: string
example: null
nullable: true
-
description: ''
type: object
example:
success: true
message: 'No subscription configuration found'
data: null
properties:
success:
type: boolean
example: true
message:
type: string
example: 'No subscription configuration found'
data:
type: string
example: null
nullable: true
tags:
- 'Subscription Configuration'
security: []