Passbolt Metadata upgrade API

Upgrading elements to the new v5 metadata format

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/passbolt-metadata-upgrade-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

passbolt-metadata-upgrade-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  contact:
    email: contact@passbolt.com
  description: This is a low-level overview of the API and its endpoints, if you need higher-level guides for interacting with the endpoints, use the Developer guide.
  license:
    name: AGPL-3.0
    url: https://www.gnu.org/licenses/agpl-3.0.html
  termsOfService: https://www.passbolt.com/terms
  title: Passbolt Authentication (GPGAuth) Authentication (GPGAuth) Metadata upgrade API
  version: 5.0.0
servers:
- url: https://passbolt.local
  description: API Passbolt
tags:
- name: Metadata upgrade
  description: Upgrading elements to the new v5 metadata format
paths:
  /metadata/upgrade/folders.json:
    get:
      summary: Get Upgradable Folders
      description: '> *Encrypted metadata for this item is not supported on all clients.*


        Retrieves a list of folders that are eligible for an upgrade to v5 format. Results are paginated and the page size is fixed at 20.

        '
      security:
      - bearerHttpAuthentication: []
      operationId: viewMetadataUpgradeFolders
      x-codeSamples:
      - lang: cURL
        source: "curl --request GET \\\n  --url {{API_BASE_URL}}/metadata/upgrade/folders.json \\\n  --header 'Authorization: Bearer {{JWT_TOKEN}}'\n"
      - lang: JavaScript
        source: "const url = '{{API_BASE_URL}}/metadata/upgrade/folders.json';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer {{JWT_TOKEN}}'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}\n"
      - lang: PHP
        source: "<?php\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"{{API_BASE_URL}}/metadata/upgrade/folders.json\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"GET\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Bearer {{JWT_TOKEN}}\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}\n"
      tags:
      - Metadata upgrade
      parameters:
      - $ref: '#/components/parameters/filterIsShared'
      - $ref: '#/components/parameters/containPermission'
      responses:
        '200':
          $ref: '#/components/responses/upgradeMetadataFolders'
        '400':
          $ref: '#/components/responses/badRequest'
        '401':
          $ref: '#/components/responses/authenticationRequired'
        '403':
          $ref: '#/components/responses/accessRestrictedToAdministrators'
    post:
      summary: Upgrade a folder
      description: '> *Encrypted metadata for this item is not supported on all clients.*


        Upgrade folders that are eligible for an upgrade to v5 format.

        '
      operationId: upgradeMetadataFolders
      security:
      - bearerHttpAuthentication: []
      x-codeSamples:
      - lang: cURL
        source: "curl --request POST \\\n--url {{API_BASE_URL}}/metadata/upgrade/folders.json \\\n--header 'authorization: Bearer {{JWT_TOKEN}}' \\\n--header 'content-type: application/json' \\\n--data '[{\n\"id\": \"0e840721-58ea-4649-b603-2d9cf4f2213c\",\n\"metadata_key_id\": \"9d9a6672-35d6-4d0f-a807-b90edf25c275\",\n\"metadata_key_type\": \"shared_key\",\n\"metadata\": \"-----BEGIN PGP MESSAGE-----\",\n\"modified\": \"2025-02-18T15:52:17+00:00\",\n\"modified_by\": \"ae48ed02-54ea-4be4-9ae8-229bf8c04739\"\n }]'\n"
      - lang: JavaScript
        source: "const url = '{{API_BASE_URL}}/metadata/upgrade/folders.json';\nconst options = {\nmethod: 'POST',\nheaders: {\n  authorization: 'Bearer {{JWT_TOKEN}}',\n  'content-type': 'application/json'\n},\nbody: '[{\"id\":\"0e840721-58ea-4649-b603-2d9cf4f2213c\",\"metadata_key_id\":\"9d9a6672-35d6-4d0f-a807-b90edf25c275\",\"metadata_key_type\":\"shared_key\",\"metadata\":\"-----BEGIN PGP MESSAGE-----\",\"modified\":\"2025-02-18T15:52:17+00:00\",\"modified_by\":\"ae48ed02-54ea-4be4-9ae8-229bf8c04739\"}]'\n};\n\n  try {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}\n"
      - lang: PHP
        source: "<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\nCURLOPT_URL => \"{{API_BASE_URL}}/metadata/upgrade/folders.json\",\nCURLOPT_RETURNTRANSFER => true,\nCURLOPT_ENCODING => \"\",\nCURLOPT_MAXREDIRS => 10,\nCURLOPT_TIMEOUT => 30,\nCURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\nCURLOPT_CUSTOMREQUEST => \"POST\",\nCURLOPT_POSTFIELDS => json_encode([\n[\n  'id' => '0e840721-58ea-4649-b603-2d9cf4f2213c',\n  'metadata_key_id' => '9d9a6672-35d6-4d0f-a807-b90edf25c275',\n  'metadata_key_type' => 'shared_key',\n  'metadata' => '-----BEGIN PGP MESSAGE-----',\n  'modified' => '2025-02-18T15:52:17+00:00',\n  'modified_by' => 'ae48ed02-54ea-4be4-9ae8-229bf8c04739'\n]\n ]),\n    CURLOPT_HTTPHEADER => [\n    \"authorization: Bearer {{JWT_TOKEN}}\",\n    \"content-type: application/json\"\n  ],\n  ]);\n\n  $response = curl_exec($curl);\n  $err = curl_error($curl);\n\n  curl_close($curl);\n\n  if ($err) {\n  echo \"cURL Error #:\" . $err;\n  } else {\n    echo $response;\n  }\n"
      tags:
      - Metadata upgrade
      parameters:
      - $ref: '#/components/parameters/containPermissions'
      responses:
        '200':
          $ref: '#/components/responses/upgradeMetadataFolders'
        '400':
          $ref: '#/components/responses/badRequest'
        '401':
          $ref: '#/components/responses/authenticationRequired'
        '403':
          $ref: '#/components/responses/accessRestrictedToAdministrators'
        '404':
          $ref: '#/components/responses/notFound'
        '409':
          $ref: '#/components/responses/entityWasUpdated'
      requestBody:
        $ref: '#/components/requestBodies/upgradeMetadataFolders'
  /metadata/upgrade/resources.json:
    get:
      summary: Get Upgradable Resources
      description: Retrieves a list of resources that are eligible for an upgrade to v5 format. Results are paginated and the page size is fixed at 20.
      security:
      - bearerHttpAuthentication: []
      operationId: viewMetadataUpgradeResources
      x-codeSamples:
      - lang: cURL
        source: "curl --request GET \\\n  --url {{API_BASE_URL}}/metadata/upgrade/resources.json \\\n  --header 'Authorization: Bearer {{JWT_TOKEN}}'\n"
      - lang: JavaScript
        source: "const url = '{{API_BASE_URL}}/metadata/upgrade/resources.json';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer {{JWT_TOKEN}}'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}\n"
      - lang: PHP
        source: "<?php\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"{{API_BASE_URL}}/metadata/upgrade/resources.json\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"GET\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Bearer {{JWT_TOKEN}}\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}\n"
      tags:
      - Metadata upgrade
      parameters:
      - $ref: '#/components/parameters/filterIsShared'
      responses:
        '200':
          $ref: '#/components/responses/upgradeMetadataResources'
        '400':
          $ref: '#/components/responses/badRequest'
        '401':
          $ref: '#/components/responses/authenticationRequired'
        '403':
          $ref: '#/components/responses/accessRestrictedToAdministrators'
    post:
      summary: Upgrade a Resource
      description: Upgrade resources that are eligible for an upgrade to v5 format.
      operationId: upgradeMetadataResources
      security:
      - bearerHttpAuthentication: []
      x-codeSamples:
      - lang: cURL
        source: "curl --request POST \\\n--url {{API_BASE_URL}}/metadata/upgrade/resources.json \\\n--header 'authorization: Bearer {{JWT_TOKEN}}' \\\n--header 'content-type: application/json' \\\n--data '[{\n\"id\": \"97f5415f-2e09-4171-a99e-1908e876662a\",\n\"metadata_key_id\": \"9d9a6672-35d6-4d0f-a807-b90edf25c275\",\n\"metadata_key_type\": \"shared_key\",\n\"metadata\": \"-----BEGIN PGP MESSAGE-----\",\n\"modified\": \"2025-02-18T15:52:17+00:00\",\n\"modified_by\": \"ae48ed02-54ea-4be4-9ae8-229bf8c04739\"\n }]'\n"
      - lang: JavaScript
        source: "const url = '{{API_BASE_URL}}/metadata/upgrade/resources.json';\nconst options = {\nmethod: 'POST',\nheaders: {\n  authorization: 'Bearer {{JWT_TOKEN}}',\n  'content-type': 'application/json'\n},\nbody: '[{\"id\":\"97f5415f-2e09-4171-a99e-1908e876662a\",\"metadata_key_id\":\"9d9a6672-35d6-4d0f-a807-b90edf25c275\",\"metadata_key_type\":\"shared_key\",\"metadata\":\"-----BEGIN PGP MESSAGE-----\",\"modified\":\"2025-02-18T15:52:17+00:00\",\"modified_by\":\"ae48ed02-54ea-4be4-9ae8-229bf8c04739\"}]'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}\n"
      - lang: PHP
        source: "<?php\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\nCURLOPT_URL => \"{{API_BASE_URL}}/metadata/upgrade/resources.json\",\nCURLOPT_RETURNTRANSFER => true,\nCURLOPT_ENCODING => \"\",\nCURLOPT_MAXREDIRS => 10,\nCURLOPT_TIMEOUT => 30,\nCURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\nCURLOPT_CUSTOMREQUEST => \"POST\",\nCURLOPT_POSTFIELDS => json_encode([\n[\n  'id' => '97f5415f-2e09-4171-a99e-1908e876662a',\n  'metadata_key_id' => '9d9a6672-35d6-4d0f-a807-b90edf25c275',\n  'metadata_key_type' => 'shared_key',\n  'metadata' => '-----BEGIN PGP MESSAGE-----',\n  'modified' => '2025-02-18T15:52:17+00:00',\n  'modified_by' => 'ae48ed02-54ea-4be4-9ae8-229bf8c04739'\n]\n]),\n  CURLOPT_HTTPHEADER => [\n  \"authorization: {{JWT_TOKEN}}\",\n  \"content-type: application/json\"\n],\n]);\n\n  $response = curl_exec($curl);\n  $err = curl_error($curl);\n\n  curl_close($curl);\n\n  if ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}\n"
      tags:
      - Metadata upgrade
      parameters:
      - $ref: '#/components/parameters/filterIsShared'
      - $ref: '#/components/parameters/containPermissions'
      responses:
        '200':
          $ref: '#/components/responses/upgradeMetadataResources'
        '400':
          $ref: '#/components/responses/badRequest'
        '401':
          $ref: '#/components/responses/authenticationRequired'
        '403':
          $ref: '#/components/responses/accessRestrictedToAdministrators'
        '404':
          $ref: '#/components/responses/notFound'
        '409':
          $ref: '#/components/responses/dateDoesntMatch'
      requestBody:
        $ref: '#/components/requestBodies/upgradeMetadataResources'
  /metadata/upgrade/tags.json:
    get:
      summary: Get Upgradable Tags
      description: '> *This endpoint is available since version 5.1.*


        > *Encrypted metadata for this item is not supported on all clients.*


        Retrieves a list of tags that are eligible for an upgrade to v5 format. Results are paginated and the page size is fixed at 20.

        '
      security:
      - bearerHttpAuthentication: []
      operationId: viewMetadataUpgradeTags
      x-codeSamples:
      - lang: cURL
        source: "curl --request GET \\\n  --url {{API_BASE_URL}}/metadata/upgrade/tags.json \\\n  --header 'Authorization: Bearer {{JWT_TOKEN}}'\n"
      - lang: JavaScript
        source: "const url = '{{API_BASE_URL}}/metadata/upgrade/tags.json';\nconst options = {method: 'GET', headers: {Authorization: 'Bearer {{JWT_TOKEN}}'}};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}\n"
      - lang: PHP
        source: "<?php\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"{{API_BASE_URL}}/metadata/upgrade/tags.json\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"GET\",\n  CURLOPT_HTTPHEADER => [\n    \"Authorization: Bearer {{JWT_TOKEN}}\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\ncurl_close($curl);\n\nif ($err) {\n  echo \"cURL Error #:\" . $err;\n} else {\n  echo $response;\n}\n"
      tags:
      - Metadata upgrade
      parameters:
      - $ref: '#/components/parameters/filterIsShared'
      responses:
        '200':
          $ref: '#/components/responses/upgradeMetadataTags'
        '400':
          $ref: '#/components/responses/badRequest'
        '401':
          $ref: '#/components/responses/authenticationRequired'
        '403':
          $ref: '#/components/responses/accessRestrictedToAdministrators'
    post:
      summary: Upgrade a tag
      description: '> *This endpoint is available since version 5.1.*


        > *Encrypted metadata for this item is not supported on all clients.*


        Upgrade tags that are eligible for an upgrade to v5 format.

        '
      operationId: processeMetadataUpgradeTags
      security:
      - bearerHttpAuthentication: []
      x-codeSamples:
      - lang: cURL
        source: "curl --request POST \\\n  --url {{API_BASE_URL}}/metadata/upgrade/tags.json \\\n  --header 'authorization: Bearer {{JWT_TOKEN}}' \\\n  --header 'content-type: application/json' \\\n  --data '[\n    {\n      \"id\": \"52ca9f92-4115-4759-a965-89e6b41b36fd\",\n      \"metadata_key_id\": \"edf0a845-94ea-4281-8d45-7d64fa06e894\",\n      \"metadata_key_type\": \"shared_key\",\n      \"metadata\": \"-----BEGIN PGP MESSAGE-----\"\n    }\n  ]'\n"
      - lang: JavaScript
        source: "const url = '{{API_BASE_URL}}/metadata/upgrade/tags.json';\nconst options = {\n  method: 'POST',\n  headers: {authorization: 'Bearer {{JWT_TOKEN}}', 'content-type': 'application/json'},\n  body: '[{\"id\":\"52ca9f92-4115-4759-a965-89e6b41b36fd\",\"metadata_key_id\":\"edf0a845-94ea-4281-8d45-7d64fa06e894\",\"metadata_key_type\":\"shared_key\",\"metadata\":\"-----BEGIN PGP MESSAGE-----\"}]'\n};\n\ntry {\n  const response = await fetch(url, options);\n  const data = await response.json();\n  console.log(data);\n} catch (error) {\n  console.error(error);\n}\n"
      - lang: PHP
        source: "<?php\n$curl = curl_init();\n\ncurl_setopt_array($curl, [\n  CURLOPT_URL => \"{{API_BASE_URL}}/metadata/upgrade/tags.json\",\n  CURLOPT_RETURNTRANSFER => true,\n  CURLOPT_ENCODING => \"\",\n  CURLOPT_MAXREDIRS => 10,\n  CURLOPT_TIMEOUT => 30,\n  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n  CURLOPT_CUSTOMREQUEST => \"POST\",\n  CURLOPT_POSTFIELDS => json_encode([\n    [\n        'id' => '52ca9f92-4115-4759-a965-89e6b41b36fd',\n        'metadata_key_id' => 'edf0a845-94ea-4281-8d45-7d64fa06e894',\n        'metadata_key_type' => 'shared_key',\n        'metadata' => '-----BEGIN PGP MESSAGE-----'\n    ]\n  ]),\n  CURLOPT_HTTPHEADER => [\n    \"authorization: Bearer {{JWT_TOKEN}}\",\n    \"content-type: application/json\"\n  ],\n]);\n\n$response = curl_exec($curl);\n$err = curl_error($curl);\n\nif ($err) {\necho \"cURL Error #:\" . $err;\n} else {\necho $response;\n}\n"
      tags:
      - Metadata upgrade
      parameters:
      - $ref: '#/components/parameters/filterIsShared'
      responses:
        '200':
          $ref: '#/components/responses/upgradeMetadataTags'
        '400':
          $ref: '#/components/responses/badRequest'
        '401':
          $ref: '#/components/responses/authenticationRequired'
        '403':
          $ref: '#/components/responses/accessRestrictedToAdministrators'
        '404':
          $ref: '#/components/responses/notFound'
      requestBody:
        $ref: '#/components/requestBodies/upgradeMetadataTags'
components:
  schemas:
    e2eeMetadataBasedId:
      allOf:
      - $ref: '#/components/schemas/e2eeMetadataBased'
      - type: object
        required:
        - id
        properties:
          id:
            type: string
            format: uuid
    folderV5IndexAndView:
      allOf:
      - $ref: '#/components/schemas/e2eeMetadataBasedCommon'
      - type: object
        properties:
          children_resources:
            type: array
            items:
              anyOf:
              - $ref: '#/components/schemas/resourceV4IndexAndView'
              - $ref: '#/components/schemas/resourceV5IndexAndView'
          children_folders:
            type: array
            items:
              anyOf:
              - $ref: '#/components/schemas/folderV4IndexAndView'
              - $ref: '#/components/schemas/folderV5IndexAndView'
    resourceV5IndexAndView:
      allOf:
      - $ref: '#/components/schemas/e2eeMetadataBasedCommon'
      - type: object
        required:
        - resource_type_id
        - expired
        properties:
          resource_type_id:
            type: string
            format: uuid
          expired:
            type: string
            format: date-time
            x-nullable: true
          favorite:
            $ref: '#/components/schemas/favorite'
          secrets:
            type: array
            items:
              type: string
          resource_type:
            $ref: '#/components/schemas/resourceType'
    groupsUsersIndexAndView:
      type: object
      required:
      - id
      - group_id
      - user_id
      - is_admin
      - created
      properties:
        id:
          type: string
          format: uuid
        group_id:
          type: string
          format: uuid
        user_id:
          type: string
          format: uuid
        is_admin:
          type: boolean
        created:
          type: string
          format: date-time
        user:
          $ref: '#/components/schemas/userIndexAndView'
    role:
      type: object
      required:
      - id
      - name
      - description
      - created
      - modified
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
          enum:
          - admin
          - guest
          - user
        description:
          type: string
        created:
          type: string
          format: date-time
        modified:
          type: string
          format: date-time
    tagV5:
      allOf:
      - $ref: '#/components/schemas/e2eeMetadataBasedId'
      - type: object
        required:
        - is_shared
        properties:
          is_shared:
            type: boolean
    e2eeMetadataBased:
      type: object
      required:
      - metadata
      - metadata_key_id
      - metadata_key_type
      properties:
        metadata:
          type: string
        metadata_key_id:
          type: string
          format: uuid
        metadata_key_type:
          type: string
          enum:
          - user_key
          - shared_key
    secretIndex:
      type: object
      required:
      - id
      - user_id
      - resource_id
      - data
      - created
      - modified
      properties:
        id:
          type: string
          format: uuid
        user_id:
          type: string
          format: uuid
        resource_id:
          type: string
          format: uuid
        data:
          type: string
        created:
          type: string
          format: date-time
        modified:
          type: string
          format: date-time
    userIndexAndView:
      type: object
      required:
      - id
      - role_id
      - username
      - active
      - deleted
      - created
      - modified
      - disabled
      properties:
        is_mfa_enabled:
          type: boolean
        id:
          type: string
          format: uuid
        role_id:
          type: string
          format: uuid
        username:
          type: string
        active:
          type: boolean
        deleted:
          type: boolean
        created:
          type: string
          format: date-time
        modified:
          type: string
          format: date-time
        disabled:
          type: string
          format: date-time
          x-nullable: true
        profile:
          type: object
          required:
          - id
          - user_id
          - first_name
          - last_name
          - created
          - modified
          - avatar
          properties:
            id:
              type: string
              format: uuid
            user_id:
              type: string
              format: uuid
            first_name:
              type: string
            last_name:
              type: string
            created:
              type: string
              format: date-time
            modified:
              type: string
              format: date-time
            avatar:
              type: object
              required:
              - url
              properties:
                id:
                  type: string
                  format: uuid
                profile_id:
                  type: string
                  format: uuid
                created:
                  type: string
                  format: date-time
                modified:
                  type: string
                  format: date-time
                url:
                  type: object
                  required:
                  - medium
                  - small
                  properties:
                    medium:
                      type: string
                      format: url
                    small:
                      type: string
                      format: url
        groups_users:
          $ref: '#/components/schemas/groupsUsersIndexAndView'
        gpgkey:
          $ref: '#/components/schemas/gpgkey'
          x-nullable: true
        role:
          $ref: '#/components/schemas/role'
        missing_metadata_key_ids:
          type: array
          items:
            type: string
            format: uuid
        last_logged_in:
          type: string
          format: date-time
          x-nullable: true
    groupIndexAndView:
      type: object
      required:
      - id
      - name
      - deleted
      - created
      - modified
      - created_by
      - modified_by
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
        deleted:
          type: boolean
        created:
          type: string
          format: date-time
        modified:
          type: string
          format: date-time
        created_by:
          type: string
          format: uuid
        modified_by:
          type: string
          format: uuid
        my_group_user:
          $ref: '#/components/schemas/groupsUsersIndexAndView'
        groups_users:
          type: array
          items:
            $ref: '#/components/schemas/groupsUsersIndexAndView'
        user_count:
          type: integer
    e2eeMetadataBasedCommon:
      allOf:
      - $ref: '#/components/schemas/e2eeMetadataBasedId'
      - type: object
        required:
        - created
        - modified
        - created_by
        - modified_by
        - personal
        - folder_parent_id
        properties:
          created:
            type: string
            format: date-time
          modified:
            type: string
            format: date-time
          created_by:
            type: string
            format: uuid
          modified_by:
            type: string
            format: uuid
          personal:
            type: boolean
          folder_parent_id:
            type: string
            format: uuid
            x-nullable: true
          modifier:
            $ref: '#/components/schemas/userIndexAndView'
          creator:
            $ref: '#/components/schemas/userIndexAndView'
          permission:
            $ref: '#/components/schemas/permissionIndexAndView'
          permissions:
            type: array
            items:
              $ref: '#/components/schemas/permissionIndexAndView'
    headerWithPagination:
      type: object
      required:
      - id
      - status
      - servertime
      - action
      - message
      - url
      - code
      - pagination
      properties:
        id:
          type: string
          format: uuid
        status:
          type: string
          enum:
          - success
          - error
        servertime:
          type: integer
          example: 1720702619
        action:
          type: string
          format: uuid
        message:
          type: string
          example: The operation was successful.
        url:
          type: string
          format: uri
          example: /auth/verify.json
        code:
          type: integer
          example: 200
        pagination:
          type: object
          required:
          - count
          - page
          - limit
          properties:
            count:
              type: integer
            page:
              type: integer
            limit:
              type: integer
              x-nullable: true
    e2eeMetadataBasedIdModifiedModifiedBy:
      allOf:
      - $ref: '#/components/schemas/e2eeMetadataBasedId'
      - type: object
        required:
        - modified
        - modified_by
        properties:
          modified:
            type: string
            format: date-time
          modified_by:
            type: string
            format: uuid
    resourceV4IndexAndView:
      type: object
      required:
      - id
      - name
      - username
      - uri
      - description
      - deleted
      - created
      - created_by
      - modified_by
      - resource_type_id
      - expired
      - folder_parent_id
      - personal
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
        username:
          type: string
        uri:
          type: string
        description:
          type: string
        deleted:
          type: boolean
        created:
          type: string
          format: date-time
        created_by:
          type: string
          format: uuid
        modified_by:
          type: string
          format: uuid
        resource_type_id:
          type: string
          format: uuid
        expired:
          type: string
          format: date-time
          x-nullable: true
        folder_parent_id:
          type: string
          format: uuid
          x-nullable: true
        personal:
          type: boolean
        favorite:
          $ref: '#/components/schemas/favorite'
        modifier:
          $ref: '#/components/schemas/userIndexAndView'
        creator:
          $ref: '#/components/schemas/userIndexAndView'
        secrets:
          type: array
          items:
            $ref: '#/components/schemas/secretIndex'
        resource_type:
          $ref: '#/components/schemas/resourceType'
        permission:
          $ref: '#/components/schemas/permissionIndexAndView'
        permissions:
          type: array
          items:
            $ref: '#/components/schemas/permissionIndexAndView'
    tagLegacy:
      type: object
      required:
      - id
      - slug
      - is_shared
      properties:
        id:
          type: string
          format: uuid
        user_id:
          type: string
          format: uuid
          x-nullable: true
        slug:
          type: string
        is_shared:
          type: boolean
    gpgkey:
      type: object
      required:
      - id
      - user_id
      - armored_key
      - bits
      - uid
      - key_id
      - fingerprint
      - type
      - expires
      - key_created
      - deleted
      - created
      - modified
      properties:
        id:
          type: string
          format: uuid
        user_id:
          type: string
          format: uuid
        armored_key:
          type: string
        bits:
          type: integer
        uid:
          type: string
        key_id:
          type: string
        fingerprint:
          type: string
        type:
          type: string
          enum:
          - RSA
          - ECC
        expires:
          type: string
          format: date-time
          x-nullable: true
        deleted:
          type: boolean
        created:
          type: string
          format: date-time
        modified:
          type: string
          format: date-time
    permissionIndexAndView:
      type: object
      required:
      - id
      - aco
      - aco_foreign_key
      - aro
      - aro_foreign_key
      - type
      - created
      - modified
      properties:
        id:
          type: string
          format: uuid
        aco:
          type: string
          enum:
          - Resource
          - Folder
        aco_foreign_key:
          type: string
          format: uuid
        aro:
          type: string
          enum:
          - User
          - Group
        aro_foreign_key:
          type: string
          format: uuid
        type:
          $ref: '#/components/schemas/permissionLevel'
        created:
          type: string
          format: date-time
        modified:
          type: string
          format: date-time
        user:
          $ref: '#/components/schemas/userIndexAndView'
          x-nullable: true
        group:
          $ref: '#/components/schemas/groupIndexAndView'
          x-nullable: true
    permissionLevel:
      description: '* `1` - Read

        * `7` - Update

        * `15` - Owner

        '
      type: integer
      enum:
      - 1
      - 7
      - 15
    resourceType:
      type: object
      required:
      - id
      - slug
      - name
      - description
      - definition
      - deleted
      - created
      - modified
      properties:
        id:
          type: string
          format: uuid
        slug:
          type: string
          description: '* `password-string` - The original passbolt resource type, where the secret is a non empty string.

            * `password-and-description` - A resource with the password and the description encrypted.

            * `totp` - A resource with standalone TOTP fields.

            * `password-description-totp` - A resource with encrypted password, description and TOTP fields.

            * `v5-default-with-totp` - The new default resource type with a TOTP introduced with v5.

            * `v5-password-string (Deprecated)` - The original passbolt resource type, kept for backward compatibility reasons.

            * `v5-totp-standalone` - The new standalone TOTP resource type introduced with v5.

            * `v5-default` - The new default resource type introduced with v5.

            '
          enum:
          - password-string
          - password-and-description
          - totp
          - password-description-totp
          - v5-default-with-totp
          - v5-password-string (Deprecated)
          - v5-totp-standalone
          - v5-default
        name:
          type: string
        description:
          type: string
        definition:
          type: object
          description: Schema for the expected data for this kind of resources.
        deleted:
          type: string
          x-nullable: true
        created:
          type: string
          format: date-time
        modified:
          type: string
          format: date-time
    folderV4IndexAndView:
      type: object
      required:
      - id
      - name
      - created
      - modified
      - created_by
      - modified_by
      - folder_parent_id
      - personal
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
        created:
          type: string
          format: date-time
        modified:
          type: string
          format: date-time
        created_by:
          type: string
          format: uuid
        modified_by:
          type: string
          format: uuid
        folder_parent_id:
          type: string
          format: uuid
          x-nullable: true
        personal:
          type: boolean
        modifier:
          $ref: '#/components/schemas/userIndexAndView'
        creator:
          $ref: '#/components/schemas/userIndexAndView'
        permission:
          $ref: '#/components/schemas/permissionIndexAndView'
        permissions:
          type: array
          items:
            $ref: '#/components/schemas/permissi

# --- truncated at 32 KB (45 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/passbolt/refs/heads/main/openapi/passbolt-metadata-upgrade-api-openapi.yml