Credentially Profiles API

Profile management proxy endpoints

Operations 17

GET /api/profile/{profileId}/tags List Profile Tags #
PUT /api/profile/{profileId}/tags Set Profile Tags #
PUT /api/profile/{profileId}/force-activate Force-activate Profile #
PUT /api/profile/{profileId}/archive Archive Profile #
PUT /api/profile/{profileId}/activate Activate Profile (un-archive) #
GET /api/profile Load Profiles #
PUT /api/profile Create Profile #
PATCH /api/profile Update Profile Fields #
GET /api/profile/{profileId}/notes Load Profile Notes #
POST /api/profile/{profileId}/notes Create Profile Note #
GET /api/profile/{profileId} Get Profile by ID #
DELETE /api/profile/{profileId} Delete Profile #
GET /api/profile/metadata Get Profile Metadata #
GET /api/profile/find Get Profile by Email #
GET /api/profile/all List All Profiles (Lightweight) #
DELETE /api/profile/{profileId}/tags/{tagName} Remove Profile Tag #
DELETE /api/profile/{profileId}/notes/{noteId} Delete Profile Note #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/credentially-profiles-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

credentially-profiles-api-openapi.yml Raw ↑
openapi: 3.2.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:
    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
    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
    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
    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
    ProfileLightDto:
      type: object
      properties:
        id:
          type: string
        email:
          type: string
        firstName:
          type: string
        lastName:
          type: string
        complianceStatus:
          type: string
    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'
    JobPositionDto:
      type: object
      properties:
        id:
          type: integer
          format: int64
        status:
          type: string
        archivedDateTime:
          type: string
        startDate:
          type: string
        trialEndDate:
          t

# --- truncated at 32 KB (42 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/credentially/refs/heads/main/openapi/credentially-profiles-api-openapi.yml