Earnipay Team API

Team member and invitation management

OpenAPI Specification

earnipay-team-api-openapi.yml Raw ↑
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