openapi: 3.1.0 info: title: Credentially Public Compliance-packages Profiles API description: Public API Proxy with Rate Limiting and Audit version: 2.0.0 servers: - url: https://app.credentially.io/gateway description: Generated server url tags: - name: Profiles description: Profile management proxy endpoints paths: /api/profile/{profileId}/tags: get: tags: - Profiles summary: List Profile Tags description: 'Returns the tags currently assigned to a profile. **Rate Limit:** `load-profile-tags` (100 req / 1s)' operationId: loadProfileTags parameters: - name: profileId in: path required: true schema: type: string - name: X-API-Version in: header schema: type: string default: 2.0.0 enum: - 2.0.0 responses: '200': description: Tags loaded successfully content: '*/*': schema: type: array items: type: string example: locum '404': description: Profile not found '500': description: Internal server error '429': description: Too many requests - the rate limit for this endpoint has been exceeded. Use the Retry-After header to determine when to retry. headers: Retry-After: description: Number of seconds to wait before retrying the request. schema: type: integer format: int32 example: 1 security: - bearer-key: [] put: tags: - Profiles summary: Set Profile Tags description: 'Replaces the full set of tags on a profile with the supplied tags. Send an empty array to clear all tags. **Rate Limit:** `load-profile-tags` (100 req / 1s)' operationId: updateProfileTags parameters: - name: profileId in: path required: true schema: type: string - name: X-API-Version in: header schema: type: string default: 2.0.0 enum: - 2.0.0 requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateProfileTagsRequestDto' required: true responses: '200': description: Tags updated successfully content: '*/*': schema: type: array items: type: string example: locum '400': description: Invalid request data '404': description: Profile not found '500': description: Internal server error '429': description: Too many requests - the rate limit for this endpoint has been exceeded. Use the Retry-After header to determine when to retry. headers: Retry-After: description: Number of seconds to wait before retrying the request. schema: type: integer format: int32 example: 1 security: - bearer-key: [] /api/profile/{profileId}/force-activate: put: tags: - Profiles summary: Force-activate Profile description: 'Forces a not-yet-active candidate to ACTIVE, bypassing the invitation-acceptance step: an IMPORTED candidate (added but never invited) or an INVITED candidate (invited but not yet accepted) becomes ACTIVE immediately, so they can be emailed and can sign in. Distinct from PUT /{profileId}/activate, which only reactivates a previously ARCHIVED profile. Idempotent on profiles that are already ACTIVE. **Rate Limit:** `force-activate-profile` (25 req / 1s)' operationId: forceActivateProfile parameters: - name: profileId in: path required: true schema: type: string - name: X-API-Version in: header schema: type: string default: 2.0.0 enum: - 2.0.0 responses: '200': description: Profile force-activated '404': description: Profile not found '500': description: Internal server error '429': description: Too many requests - the rate limit for this endpoint has been exceeded. Use the Retry-After header to determine when to retry. headers: Retry-After: description: Number of seconds to wait before retrying the request. schema: type: integer format: int32 example: 1 security: - bearer-key: [] /api/profile/{profileId}/archive: put: tags: - Profiles summary: Archive Profile description: 'Archives a profile within the organisation. **Rate Limit:** `archive-profile` (25 req / 1s)' operationId: archiveProfile parameters: - name: profileId in: path required: true schema: type: string - name: X-API-Version in: header schema: type: string default: 2.0.0 enum: - 2.0.0 responses: '200': description: Profile archived '404': description: Profile not found '500': description: Internal server error '429': description: Too many requests - the rate limit for this endpoint has been exceeded. Use the Retry-After header to determine when to retry. headers: Retry-After: description: Number of seconds to wait before retrying the request. schema: type: integer format: int32 example: 1 security: - bearer-key: [] /api/profile/{profileId}/activate: put: tags: - Profiles summary: Activate Profile (un-archive) description: 'Reactivates a previously ARCHIVED profile (reverses archive). This does NOT activate a candidate who was never invited or has not yet accepted their invitation — for that use PUT /{profileId}/force-activate. **Rate Limit:** `activate-profile` (25 req / 1s)' operationId: activateProfile parameters: - name: profileId in: path required: true schema: type: string - name: X-API-Version in: header schema: type: string default: 2.0.0 enum: - 2.0.0 responses: '200': description: Profile activated '404': description: Profile not found '500': description: Internal server error '429': description: Too many requests - the rate limit for this endpoint has been exceeded. Use the Retry-After header to determine when to retry. headers: Retry-After: description: Number of seconds to wait before retrying the request. schema: type: integer format: int32 example: 1 security: - bearer-key: [] /api/profile: get: tags: - Profiles summary: Load Profiles description: 'Fetches a paginated list of profiles for the organisation. **Rate Limit:** `create-profile` (25 req / 1s)' operationId: loadProfiles parameters: - name: page in: query required: false schema: type: integer format: int32 default: 0 - name: size in: query required: false schema: type: integer format: int32 default: 20 - name: name in: query description: Smart search of first name, last name and email required: false schema: type: string description: Smart search of first name, last name and email - name: complianceStatus in: query description: Compliance status required: false schema: type: string description: Compliance status enum: - COMPLIANT - NOT_COMPLIANT - name: complianceTag in: query required: false schema: type: array description: Compliance tags example: - REFERENCE_AWAITING_APPROVAL - REFERENCE_BOUNCED - REFERENCE_NOT_ENOUGH - DOCUMENTS_DECLINED - DOCUMENTS_AWAITING_APPROVAL - DOCUMENTS_MISSING items: type: string - name: groups in: query required: false schema: type: array description: Groups example: - group01-public-id - group02-public-id - group03-public-id items: type: string - name: jobPositionStatus in: query required: false schema: type: array items: type: string description: Job position status enum: - ACTIVE - INVITED - IMPORTED - ARCHIVED - name: X-API-Version in: header schema: type: string default: 2.0.0 enum: - 2.0.0 responses: '200': description: Profiles loaded content: '*/*': schema: $ref: '#/components/schemas/ProfileListPageDto' '500': description: Internal server error '429': description: Too many requests - the rate limit for this endpoint has been exceeded. Use the Retry-After header to determine when to retry. headers: Retry-After: description: Number of seconds to wait before retrying the request. schema: type: integer format: int32 example: 1 security: - bearer-key: [] put: tags: - Profiles summary: Create Profile description: 'Creates a new profile and optionally populates custom fields in a single transaction. **Rate Limit:** `create-profile` (25 req / 1s)' operationId: createProfile parameters: - name: X-API-Version in: header schema: type: string default: 2.0.0 enum: - 2.0.0 requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateProfileRequestDto' required: true responses: '201': description: Profile created successfully content: '*/*': schema: $ref: '#/components/schemas/CreateProfileResponseDto' '400': description: Invalid request data (e.g. invalid role) '500': description: Internal server error '429': description: Too many requests - the rate limit for this endpoint has been exceeded. Use the Retry-After header to determine when to retry. headers: Retry-After: description: Number of seconds to wait before retrying the request. schema: type: integer format: int32 example: 1 security: - bearer-key: [] patch: tags: - Profiles summary: Update Profile Fields description: 'Updates fields for an existing profile identified by email. **Rate Limit:** `create-profile` (25 req / 1s)' operationId: updateProfileFields parameters: - name: X-API-Version in: header schema: type: string default: 2.0.0 enum: - 2.0.0 requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateProfileFieldsRequestDto' required: true responses: '200': description: Fields updated successfully content: '*/*': schema: $ref: '#/components/schemas/CreateProfileResponseDto' '404': description: Profile not found for email '500': description: Internal server error '429': description: Too many requests - the rate limit for this endpoint has been exceeded. Use the Retry-After header to determine when to retry. headers: Retry-After: description: Number of seconds to wait before retrying the request. schema: type: integer format: int32 example: 1 security: - bearer-key: [] /api/profile/{profileId}/notes: get: tags: - Profiles summary: Load Profile Notes description: 'Loads notes for a profile. **Rate Limit:** `load-profile-notes` (100 req / 1s)' operationId: loadProfileNotes parameters: - name: profileId in: path required: true schema: type: string - name: X-API-Version in: header schema: type: string default: 2.0.0 enum: - 2.0.0 responses: '200': description: Notes loaded successfully content: '*/*': schema: type: array items: $ref: '#/components/schemas/ProfileNoteDto' '404': description: Profile not found '500': description: Internal server error '429': description: Too many requests - the rate limit for this endpoint has been exceeded. Use the Retry-After header to determine when to retry. headers: Retry-After: description: Number of seconds to wait before retrying the request. schema: type: integer format: int32 example: 1 security: - bearer-key: [] post: tags: - Profiles summary: Create Profile Note description: 'Creates a note for a profile. **Rate Limit:** `load-profile-notes` (100 req / 1s)' operationId: createProfileNote parameters: - name: profileId in: path required: true schema: type: string - name: X-API-Version in: header schema: type: string default: 2.0.0 enum: - 2.0.0 requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateProfileNoteRequestDto' required: true responses: '201': description: Note created successfully content: '*/*': schema: $ref: '#/components/schemas/ProfileNoteDto' examples: createProfileNoteRequest: description: createProfileNoteRequest value: mentionedPublicIds: - user-1 note: Candidate confirmed their availability for the next onboarding step. '400': description: Invalid request data '404': description: Profile not found '500': description: Internal server error '429': description: Too many requests - the rate limit for this endpoint has been exceeded. Use the Retry-After header to determine when to retry. headers: Retry-After: description: Number of seconds to wait before retrying the request. schema: type: integer format: int32 example: 1 security: - bearer-key: [] /api/profile/{profileId}: get: tags: - Profiles summary: Get Profile by ID description: 'Fetches detailed profile information for a profile by their ID, including enriched custom fields. **Rate Limit:** `profile-by-id` (100 req / 1s)' operationId: getProfileById parameters: - name: profileId in: path required: true schema: type: string - name: X-API-Version in: header schema: type: string default: 2.0.0 enum: - 2.0.0 responses: '200': description: Profile found content: '*/*': schema: $ref: '#/components/schemas/ProfileDetailDto' '404': description: Profile not found '500': description: Internal server error '429': description: Too many requests - the rate limit for this endpoint has been exceeded. Use the Retry-After header to determine when to retry. headers: Retry-After: description: Number of seconds to wait before retrying the request. schema: type: integer format: int32 example: 1 security: - bearer-key: [] delete: tags: - Profiles summary: Delete Profile description: 'Deletes a profile from the organisation. **Rate Limit:** `profile-by-id` (100 req / 1s)' operationId: deleteProfile parameters: - name: profileId in: path required: true schema: type: string - name: X-API-Version in: header schema: type: string default: 2.0.0 enum: - 2.0.0 responses: '204': description: Profile deleted '404': description: Profile not found '500': description: Internal server error '429': description: Too many requests - the rate limit for this endpoint has been exceeded. Use the Retry-After header to determine when to retry. headers: Retry-After: description: Number of seconds to wait before retrying the request. schema: type: integer format: int32 example: 1 security: - bearer-key: [] /api/profile/metadata: get: tags: - Profiles summary: Get Profile Metadata description: 'Fetches and aggregates profile metadata fields (schema) and available roles for the organisation. **Rate Limit:** `profile-metadata` (100 req / 1s)' operationId: getProfileMetadata parameters: - name: X-API-Version in: header schema: type: string default: 2.0.0 enum: - 2.0.0 responses: '200': description: Metadata retrieved successfully content: '*/*': schema: $ref: '#/components/schemas/OrganisationMetadataDto' '500': description: Internal server error '429': description: Too many requests - the rate limit for this endpoint has been exceeded. Use the Retry-After header to determine when to retry. headers: Retry-After: description: Number of seconds to wait before retrying the request. schema: type: integer format: int32 example: 1 security: - bearer-key: [] /api/profile/find: get: tags: - Profiles summary: Get Profile by Email description: 'Fetches detailed profile information, including enriched custom fields. **Rate Limit:** `profile-by-email` (100 req / 1s)' operationId: getProfileByEmail parameters: - name: email in: query required: true schema: type: string - name: X-API-Version in: header schema: type: string default: 2.0.0 enum: - 2.0.0 responses: '200': description: Profile found content: '*/*': schema: $ref: '#/components/schemas/ProfileDetailDto' '404': description: Profile not found '500': description: Internal server error '429': description: Too many requests - the rate limit for this endpoint has been exceeded. Use the Retry-After header to determine when to retry. headers: Retry-After: description: Number of seconds to wait before retrying the request. schema: type: integer format: int32 example: 1 security: - bearer-key: [] /api/profile/all: get: tags: - Profiles summary: List All Profiles (Lightweight) description: 'Fetches a non-paginated list of all profiles for the organisation with lightweight information. **Rate Limit:** `load-all-profiles` (5 req / 1s)' operationId: loadAllProfiles parameters: - name: X-API-Version in: header schema: type: string default: 2.0.0 enum: - 2.0.0 responses: '200': description: Profiles loaded content: '*/*': schema: type: array items: $ref: '#/components/schemas/ProfileLightDto' '500': description: Internal server error '429': description: Too many requests - the rate limit for this endpoint has been exceeded. Use the Retry-After header to determine when to retry. headers: Retry-After: description: Number of seconds to wait before retrying the request. schema: type: integer format: int32 example: 1 security: - bearer-key: [] /api/profile/{profileId}/tags/{tagName}: delete: tags: - Profiles summary: Remove Profile Tag description: 'Removes a single tag from a profile. The tag name must be URL-encoded. **Rate Limit:** `delete-profile-tag` (25 req / 1s)' operationId: deleteProfileTag parameters: - name: profileId in: path required: true schema: type: string - name: tagName in: path required: true schema: type: string - name: X-API-Version in: header schema: type: string default: 2.0.0 enum: - 2.0.0 responses: '200': description: Tag removed successfully '404': description: Profile not found '500': description: Internal server error '429': description: Too many requests - the rate limit for this endpoint has been exceeded. Use the Retry-After header to determine when to retry. headers: Retry-After: description: Number of seconds to wait before retrying the request. schema: type: integer format: int32 example: 1 security: - bearer-key: [] /api/profile/{profileId}/notes/{noteId}: delete: tags: - Profiles summary: Delete Profile Note description: 'Deletes a note from a profile. **Rate Limit:** `delete-profile-note` (25 req / 1s)' operationId: deleteProfileNote parameters: - name: profileId in: path required: true schema: type: string - name: noteId in: path required: true schema: type: string - name: X-API-Version in: header schema: type: string default: 2.0.0 enum: - 2.0.0 responses: '204': description: Note deleted successfully '404': description: Profile or note not found '500': description: Internal server error '429': description: Too many requests - the rate limit for this endpoint has been exceeded. Use the Retry-After header to determine when to retry. headers: Retry-After: description: Number of seconds to wait before retrying the request. schema: type: integer format: int32 example: 1 security: - bearer-key: [] components: schemas: OrganisationRoleDto: type: object properties: id: type: integer format: int64 name: type: string description: type: string staffType: type: string reserved: type: boolean accessTags: type: array items: type: string employeesCount: type: integer format: int32 signUpAllowed: type: boolean GradeDto: type: object properties: code: type: string name: type: string JobPositionDto: type: object properties: id: type: integer format: int64 status: type: string archivedDateTime: type: string startDate: type: string trialEndDate: type: string endDate: type: string signedOff: type: boolean skipOnboarding: type: boolean workSiteId: type: integer format: int64 role: $ref: '#/components/schemas/RoleDto' complianceStatus: type: string complianceStatusTags: type: array items: $ref: '#/components/schemas/ComplianceTagDto' uniqueItems: true HcpcRegistrationDetailsDto: type: object properties: fullName: type: string surname: type: string givenName: type: string speciality: type: string profCode: type: string town: type: string status: type: string registeredFrom: type: string format: date registeredTo: type: string format: date localAnaesthetic: type: string prescriptionOnlyMedicine: type: string supplementaryPrescribing: type: string independentPrescribing: type: string modalities: type: string lastCheckDateTime: type: string format: date-time RoleExtendedDto: type: object properties: id: type: integer format: int64 name: type: string description: type: string staffType: type: string reserved: type: boolean accessTags: type: array items: type: string ChecklistStepStatusApprovalDto: type: object properties: type: type: string approver: $ref: '#/components/schemas/EmployeeBasicDto' NmcRegistrationDetailsDto: type: object properties: fullName: type: string birthDate: type: string format: date status: type: string qualifications: type: array items: $ref: '#/components/schemas/NmcQualificationDto' lastCheckDateTime: type: string format: date-time CreateProfileRequestDto: type: object properties: email: type: string minLength: 1 roleName: type: string minLength: 1 firstName: type: string lastName: type: string birthDate: type: string format: date registrationNumber: type: string phone: type: string skipOnboarding: type: boolean sendInviteEmail: type: boolean forceActivate: type: boolean default: false description: When true, the created candidate is immediately force-activated (IMPORTED/INVITED → ACTIVE), bypassing the invitation-acceptance step, so they can be emailed and can sign in straight away. Intended for provisioning an already-active member without sending an invitation — typically used with sendInviteEmail = false/null. Defaults to false. example: false groups: type: array items: $ref: '#/components/schemas/OrganisationGroupDto' fields: type: array items: $ref: '#/components/schemas/CustomFieldInputDto' required: - email - roleName ProfileMetadataResultDto: type: object properties: name: type: string jsonSchema: type: object additionalProperties: {} CreateProfileResponseDto: type: object properties: customFieldUpdateResult: type: string profileDto: $ref: '#/components/schemas/ProfileDto' CreateProfileNoteRequestDto: type: object description: Request body for creating a profile note. properties: mentionedPublicIds: type: array description: Optional list of public user IDs mentioned in the note. example: - user-1 - user-2 items: type: string uniqueItems: true note: type: string description: Note message to add to the profile. example: Candidate confirmed their availability for the next onboarding step. maxLength: 2048 minLength: 0 required: - note CustomFieldDto: type: object properties: shortName: type: string name: type: string value: {} ConditionsDetailDto: type: object properties: ftpConditionsExist: type: boolean ftpUndertakingsExist: type: boolean ftpWarningsExist: type: boolean HistoryActorDto: type: object properties: id: type: string fullName: type: string roleName: type: string avatarUrl: type: string active: type: boolean ProfileDetailDto: type: object properties: id: type: string firstName: type: string lastName: type: string title: $ref: '#/components/schemas/UserTitleDto' gender: type: string birthDate: type: string format: date gradeName: $ref: '#/components/schemas/GradeDto' otherGrade: type: string medicalCategory: type: string medicalSpecialty: type: string personnelType: $ref: '#/components/schemas/RoleExtendedDto' jobs: type: array items: $ref: '#/components/schemas/JobPositionDto' uniqueItems: true complianceStatus: type: string email: type: string complianceStatusTags: type: array items: $ref: '#/components/schemas/ComplianceTagDto' uniqueItems: true customProfileFields: type: array items: $ref: '#/components/schemas/CustomFieldDto' registrationNumber: type: string writeOnly: true registrationNumberType: type: string writeOnly: true registrationNumberStatus: type: string writeOnly: true gmcInfo: $ref: '#/components/schemas/GmcRegistrationDetailsDto' writeOnly: true nmcData: $ref: '#/components/schemas/NmcRegistrationDetailsDto' writeOnly: true hcpcInfo: $ref: '#/components/schemas/HcpcRegistrationDetailsDto' writeOnly: true professionalRegistration: $ref: '#/components/schemas/ProfessionalRegistrationDto' checklists: type: array items: $ref: '#/components/schemas/ChecklistAssignmentDetailDto' uniqueItems: true tags: type: array items: type: string readOnly: true uniqueItems: true UpdateProfileTagsRequestDto: type: object description: Request body for replacing the full set of tags on a profile. properties: tags: type: array description: The complete set of tags for the profile. This replaces any existing tags; send an empty array to clear all tags. example: - locum - night-shift items: type: string minLength: 1 uniqueItems: true required: - tags OrganisationGroupDto: type: object properties: id: type: string name: type: string ProfileNoteDto: type: object properties: id: type: string message: type: string owner: $ref: '#/components/schemas/HistoryActorDto' created: type: string format: date-time ChecklistStepStatusDto: type: object properties: id: type: integer format: int64 completed: type: boolean completedDateTime: type: string format: date-time stepId: type: integer format: int64 name: type: string description: type: string type: type: string canBeSkipped: type: boolean mandatory: type: boolean additionalInformation: type: object additionalProperties: {} approval: $ref: '#/components/schemas/ChecklistStepStatusApprovalDto' completedBy: $ref: '#/components/schemas/EmployeeBasicDto' ProfileDto: type: object properties: id: type: string firstName: type: string lastName: type: string title: $ref: '#/components/schemas/UserTitleDto' gender: type: string birthDate: type: string format: date gradeName: $ref: '#/components/schemas/GradeDto' otherGrade: type: string medicalCategory: type: string medicalSpecialty: type: string personnelType: $ref: '#/components/schemas/RoleExtendedDto' jobs: type: array items: $ref: '#/components/schemas/JobPositionDto' uniqueItems: true complianceStatus: type: string email: type: string complianceStatusTags: type: array items: $ref: '#/components/schemas/ComplianceTagDto' uniqueItems: true customProfileFields: type: array items: $ref: '#/components/schemas/CustomFieldDto' registrationNumber: type: string writeOnly: true registrationNumberType: type: string writeOnly: true registrationNumberStatus: type: string writeOnly: true gmcInfo: $ref: '#/components/schemas/GmcRegistrationDetailsDto' writeOnly: true nmcData: $ref: '#/components/schemas/NmcRegistrationDetailsDto' writeOnly: true hcpcInfo: $ref: '#/components/schemas/HcpcRegistrationDetailsDto' writeOnly: true professionalRegistration: $ref: '#/components/schemas/ProfessionalRegistrationDto' checklists: type: array items: $ref: '#/components/schemas/ChecklistAssignmentDto' uniqueItems: true ChecklistAssignmentDto: type: object properties: id: type: string status: type: string type: type: string UpdateProfileFieldsRequestDto: type: object properties: email: type: string minLength: 1 registrationNumber: type: string fields: type: array items: $ref: '#/components/schemas/CustomFieldInputDto' required: - email GmcRegistrationDetailsDto: type: object properties: fullName: type: string surname: type: string givenName: type: string otherNames: type: string gender: type: string qualification: type: string yearOfQualification: type: string placeOfQualification: type: string placeOfQualificationCountry: type: string provisionalRegistrationDate: type: string format: date fullRegistrationDate: type: string format: date specialistRegisterDate: type: string format: date gpRegisterDate: type: string format: date registrationStatus: type: string arfDueDate: type: string format: date specialty1: type: string subSpecialty1: type: string specialty2: type: string subSpecialty2: type: string specialty3: type: string subSpecialty3: type: string specialty4: type: string subSpecialty4: type: string specialty5: type: string subSpecialty5: type: string specialty6: type: string subSpecialty6: type: string specialty7: type: string subSpecialty7: type: string revalidationStatus: type: string designatedBody: type: string responsibleOfficer: type: string doctorInTraining: type: boolean trainingDeaneryLetb: type: string trainingProgrammeSpecialty: type: string gmcApprovedTrainer: type: boolean trainerDeaneryLetb1: type: string trainerProgrammesSpecialty1: type: string trainerDeaneryLetb2: type: string trainerProgrammesSpecialty2: type: string trainerDeaneryLetb3: type: string trainerProgrammesSpecialty3: type: string ftpConditionsExist: type: boolean ftpUndertakingsExist: type: boolean ftpWarningsExist: type: boolean idCheckNotDone: type: boolean temporaryCovidRegistration: type: boolean lastCheckDateTime: type: string format: date-time EmployeeBasicDto: type: object properties: id: type: string firstName: type: string lastName: type: string smallAvatarUrl: type: string ProfessionalRegistrationDto: type: object properties: registrationNumber: type: string registrationNumberType: type: string lookupStatus: type: string registrationStatus: type: string lastCheckDateTime: type: string format: date-time hasConditions: type: boolean conditionsDetail: $ref: '#/components/schemas/ConditionsDetailDto' hasLicenceToPractise: type: boolean gmcDetails: $ref: '#/components/schemas/GmcRegistrationDetailsDto' nmcDetails: $ref: '#/components/schemas/NmcRegistrationDetailsDto' hcpcDetails: $ref: '#/components/schemas/HcpcRegistrationDetailsDto' RoleDto: type: object properties: id: type: string name: type: string ChecklistAssignmentDetailDto: type: object properties: id: type: integer format: int64 type: type: string status: type: string startedDateTime: type: string format: date-time completedDateTime: type: string format: date-time checklistId: type: integer format: int64 name: type: string organisationId: type: integer format: int64 steps: type: array items: $ref: '#/components/schemas/ChecklistStepStatusDto' OrganisationMetadataDto: type: object properties: profileFields: type: array items: $ref: '#/components/schemas/ProfileMetadataResultDto' roles: type: array items: $ref: '#/components/schemas/OrganisationRoleDto' UserTitleDto: type: object properties: key: type: string defaultValue: type: string ComplianceTagDto: type: object properties: key: type: string group: type: string enum: - COMPLIANCE_ERROR - COMPLIANCE_OK NmcQualificationDto: type: object properties: abbreviation: type: string startDate: type: string format: date feeExpiryDate: type: string format: date renewalDate: type: string format: date comment: type: string CustomFieldInputDto: type: object properties: fieldName: type: string value: {} ProfileLightDto: type: object properties: id: type: string email: type: string firstName: type: string lastName: type: string complianceStatus: type: string ProfileListPageDto: type: object properties: content: type: array items: $ref: '#/components/schemas/ProfileDto' totalPages: type: integer format: int32 totalElements: type: integer format: int64 size: type: integer format: int32 number: type: integer format: int32 securitySchemes: bearer-key: type: http scheme: bearer bearerFormat: JWT