OpenAPI Specification
openapi: 3.0.0
info:
title: Earnipay Invoicing App Team API
description: FIRS-compliant e-invoicing platform API
version: '1.0'
contact: {}
servers: []
tags:
- name: Team
description: Team member and invitation management
paths:
/v1/team/invite:
post:
description: Send an invitation to join the business team. Only OWNER and ADMIN can invite members.
operationId: TeamController_inviteTeamMember_v1
parameters:
- name: businessId
required: true
in: query
description: Business ID
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/InviteTeamMemberDto'
responses:
'201':
description: Invitation sent successfully
'400':
description: Bad Request - Invalid input or user already invited
'401':
description: Unauthorized
'403':
description: Forbidden - Insufficient permissions
'409':
description: Conflict - User already a member or invitation pending
security:
- JWT-auth: []
summary: Invite team member
tags:
- Team
/v1/team:
get:
description: Retrieve team members with optional filters and pagination. Can include pending invitations.
operationId: TeamController_getTeam_v1
parameters:
- name: businessId
required: true
in: query
description: Business ID
schema:
type: string
- name: page
required: false
in: query
description: Page number
schema:
default: 1
example: 1
type: number
- name: limit
required: false
in: query
description: Items per page
schema:
default: 20
example: 20
type: number
- name: search
required: false
in: query
description: Search by name or email
schema:
example: john
type: string
- name: role
required: false
in: query
description: Filter by role
schema:
enum:
- OWNER
- ADMIN
- MANAGER
- CREATOR
- VIEWER
type: string
- name: includePendingInvitations
required: false
in: query
description: Include pending invitations
schema:
default: false
example: true
type: boolean
responses:
'200':
description: Team members retrieved successfully
'401':
description: Unauthorized
'403':
description: Forbidden - No access to this business
security:
- JWT-auth: []
summary: Get team members
tags:
- Team
/v1/team/invitations/{token}/accept:
post:
description: Accept a team invitation using the token from the invitation email. New users must provide firstName, lastName, and password.
operationId: TeamController_acceptInvitation_v1
parameters:
- name: token
required: true
in: path
description: Invitation token
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AcceptInvitationDto'
responses:
'200':
description: Invitation accepted successfully
'400':
description: Bad Request - Invitation expired or already accepted, or missing required fields for new users
'404':
description: Invitation not found
'409':
description: Conflict - Already a member
security:
- JWT-auth: []
summary: Accept team invitation
tags:
- Team
/v1/team/invitations/{id}:
delete:
description: Cancel a pending team invitation. Only OWNER and ADMIN can revoke invitations.
operationId: TeamController_revokeInvitation_v1
parameters:
- name: id
required: true
in: path
description: Invitation ID
schema:
type: string
- name: businessId
required: true
in: query
description: Business ID
schema:
type: string
responses:
'200':
description: Invitation revoked successfully
'400':
description: Bad Request - Only pending invitations can be revoked
'401':
description: Unauthorized
'403':
description: Forbidden - Insufficient permissions
'404':
description: Invitation not found
security:
- JWT-auth: []
summary: Revoke team invitation
tags:
- Team
/v1/team/members/{id}/role:
patch:
description: Update the role of a team member. Only OWNER and ADMIN can update roles.
operationId: TeamController_updateMemberRole_v1
parameters:
- name: id
required: true
in: path
description: Team member ID (BusinessUser ID)
schema:
type: string
- name: businessId
required: true
in: query
description: Business ID
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateMemberRoleDto'
responses:
'200':
description: Member role updated successfully
'400':
description: Bad Request - Cannot change owner role or assign owner role
'401':
description: Unauthorized
'403':
description: Forbidden - Insufficient permissions
'404':
description: Team member not found
security:
- JWT-auth: []
summary: Update team member role
tags:
- Team
/v1/team/members/{id}:
delete:
description: Remove a member from the team. Only OWNER and ADMIN can remove members.
operationId: TeamController_removeMember_v1
parameters:
- name: id
required: true
in: path
description: Team member ID (BusinessUser ID)
schema:
type: string
- name: businessId
required: true
in: query
description: Business ID
schema:
type: string
responses:
'200':
description: Team member removed successfully
'400':
description: Bad Request - Cannot remove owner or self
'401':
description: Unauthorized
'403':
description: Forbidden - Insufficient permissions
'404':
description: Team member not found
security:
- JWT-auth: []
summary: Remove team member
tags:
- Team
components:
schemas:
UpdateMemberRoleDto:
type: object
properties:
role:
type: string
description: New role for the team member
enum:
- OWNER
- ADMIN
- MANAGER
- CREATOR
- VIEWER
example: MANAGER
required:
- role
AcceptInvitationDto:
type: object
properties:
firstName:
type: string
description: First name (required for new users)
example: John
lastName:
type: string
description: Last name (required for new users)
example: Doe
password:
type: string
description: Password (required for new users, min 8 chars)
example: MyP@ssw0rd
InviteTeamMemberDto:
type: object
properties:
email:
type: string
description: Email address of the person to invite
example: john.doe@example.com
role:
type: string
description: Role to assign to the team member
enum:
- OWNER
- ADMIN
- MANAGER
- CREATOR
- VIEWER
example: CREATOR
required:
- email
- role
securitySchemes:
JWT-auth:
scheme: bearer
bearerFormat: JWT
type: http
name: JWT
description: Enter JWT token
in: header
API-Key:
type: apiKey
in: header
name: X-API-Key
description: API Key for third-party integrations