{
  "openapi": "3.0.3",
  "info": {
    "title": "Identity and Access Management",
    "version": "v1",
    "description": ""
  },
  "servers": [
    {
      "url": "cloud.kaaiot.com/iam/api/v1",
      "description": "API Server"
    }
  ],
  "paths": {
    "/users": {
      "post": {
        "description": "Registers a new user.",
        "responses": {
          "201": {
            "description": "The user is successfully registered.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserResponse"
                },
                "example": {
                  "data": {
                    "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjp1c2VyL29yZzEvdG9t",
                    "created": "2021-10-18T08:47:54.219531Z",
                    "updated": "2021-10-18T08:47:54.219531Z",
                    "irn": "irn:rc73dbh7q0:iamcore:4atcicnisg::user/org1/tom",
                    "tenantID": "4atcicnisg",
                    "authID": "68a8372d-cc0a-4a42-8a56-099ac466e0bd",
                    "email": "tom@example.com",
                    "enabled": true,
                    "firstName": "Tom",
                    "lastName": "Jasper",
                    "username": "tom",
                    "path": "/org1",
                    "metadata": {
                      "language": "uk",
                      "age": 23
                    },
                    "poolIDs": [
                      "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                    ]
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserCreationRequest"
              },
              "example": {
                "firstName": "Tom",
                "lastName": "Jasper",
                "email": "tom@example.com",
                "enabled": true,
                "username": "tom",
                "password": "YesYkYKpLd6n3dVZ",
                "confirmPassword": "YesYkYKpLd6n3dVZ",
                "path": "/org1",
                "poolIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                ]
              }
            }
          }
        }
      },
      "get": {
        "description": "Retrieves users.",
        "responses": {
          "200": {
            "description": "Users are successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UsersResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjp1c2VyL29yZzEvdG9t",
                      "created": "2021-10-18T08:47:54.219531Z",
                      "updated": "2021-10-18T08:47:54.219531Z",
                      "irn": "irn:rc73dbh7q0:iamcore:4atcicnisg::user/org1/tom",
                      "tenantID": "4atcicnisg",
                      "authID": "68a8372d-cc0a-4a42-8a56-099ac466e0bd",
                      "email": "tom@example.com",
                      "enabled": true,
                      "firstName": "Tom",
                      "lastName": "Jasper",
                      "username": "tom",
                      "path": "/org1",
                      "metadata": {
                        "language": "uk",
                        "age": 23
                      },
                      "poolIDs": [
                        "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                      ]
                    }
                  ],
                  "count": 1,
                  "page": 1,
                  "pageSize": 10
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "parameters": [
          {
            "name": "email",
            "in": "query",
            "description": "User email. Supports partial match.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "tom@example.com"
          },
          {
            "name": "path",
            "in": "query",
            "description": "User path. Supports wildcards `*`, e.g., `/org*` query param will match `/org`, `/org1`, `/org/sub-org`.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "/org1"
          },
          {
            "name": "firstName",
            "in": "query",
            "description": "User first name. Supports partial match.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "Tom"
          },
          {
            "name": "lastName",
            "in": "query",
            "description": "User last name. Supports partial match.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "Jasper"
          },
          {
            "name": "username",
            "in": "query",
            "description": "Username. Supports partial match.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "tom"
          },
          {
            "name": "tenantID",
            "in": "query",
            "description": "User tenant ID. Supports partial match.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "4atcicnisg"
          },
          {
            "name": "search",
            "in": "query",
            "description": "Filter users by partial match on email, username, first name, or last name.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "Tom Jasper"
          },
          {
            "name": "irn",
            "in": "query",
            "description": "User IRN. Supports partial match.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "irn:rc73dbh7q0:iamcore:4atcicnisg::user/org1/tom"
          }
        ]
      }
    },
    "/users/paths": {
      "get": {
        "description": "Retrieves unique user paths.",
        "responses": {
          "200": {
            "description": "User paths are successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserPathsResponse"
                },
                "example": {
                  "data": [
                    "/org1",
                    "/org2"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      }
    },
    "/users/delete": {
      "post": {
        "description": "Deletes users in bulk.",
        "responses": {
          "204": {
            "description": "Users successfully deleted."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UsersBulkDeleteRequest"
              },
              "example": {
                "userIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjp1c2VyL29yZzEvdG9t"
                ]
              }
            }
          }
        }
      }
    },
    "/users/me": {
      "get": {
        "description": "Retrieves currently authenticated user's information.",
        "responses": {
          "200": {
            "description": "The user is successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "data": {
                    "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjp1c2VyL29yZzEvdG9t",
                    "created": "2021-10-18T08:47:54.219531Z",
                    "updated": "2021-10-18T08:47:54.219531Z",
                    "irn": "irn:rc73dbh7q0:iamcore:4atcicnisg::user/org1/tom",
                    "tenantID": "4atcicnisg",
                    "authID": "68a8372d-cc0a-4a42-8a56-099ac466e0bd",
                    "email": "tom@example.com",
                    "enabled": true,
                    "firstName": "Tom",
                    "lastName": "Jasper",
                    "username": "tom",
                    "path": "/org1",
                    "metadata": {
                      "language": "uk",
                      "age": 23
                    },
                    "poolIDs": [
                      "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                    ]
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      },
      "patch": {
        "description": "Updates currently authenticated user's information.",
        "responses": {
          "204": {
            "description": "The user is successfully updated."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserUpdateRequest"
              },
              "example": {
                "firstName": "MorganUpdated",
                "lastName": "JosephUpdated",
                "email": "josephm@gmail.com",
                "enabled": true,
                "poolIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                ]
              }
            }
          }
        }
      },
      "delete": {
        "description": "Deletes currently authenticated user.",
        "responses": {
          "204": {
            "description": "The user is successfully deleted."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      }
    },
    "/users/me/metadata": {
      "put": {
        "description": "Updates currently authenticated user metadata.",
        "responses": {
          "204": {
            "description": "Metadata is successfully updated."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {},
              "example": {
                "language": "uk",
                "timezone": "Europe/Kyiv"
              }
            }
          }
        }
      }
    },
    "/users/me/irn": {
      "get": {
        "description": "Retrieves currently authenticated user's IRN.",
        "responses": {
          "200": {
            "description": "Currently authenticated user's IRN is successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserIRNResponse"
                },
                "example": {
                  "data": "irn:rc73dbh7q0:iamcore:4atcicnisg::user/org1/tom"
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      }
    },
    "/users/me/password/change": {
      "post": {
        "description": "Changes the currently authenticated user's password.",
        "responses": {
          "204": {
            "description": "The user's password is successfully changed."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserPasswordChangeRequest"
              },
              "example": {
                "oldPassword": "YesYkYKpLd6n3dVZ",
                "newPassword": "KPJ9KP33afQqG7ke",
                "confirmPassword": "KPJ9KP33afQqG7ke"
              }
            }
          }
        }
      }
    },
    "/users/me/password/reset": {
      "post": {
        "description": "Resets the currently authenticated user's password.",
        "responses": {
          "204": {
            "description": "The user's password is successfully reset."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UserPasswordResetRequest"
              },
              "example": {
                "newPassword": "hh8VkeHymc3j8NYJ",
                "confirmPassword": "hh8VkeHymc3j8NYJ"
              }
            }
          }
        }
      }
    },
    "/users/me/groups": {
      "get": {
        "description": "Retrieves the currently authenticated user's membership groups.",
        "responses": {
          "200": {
            "description": "Membership groups are successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GroupsResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpncm91cC9kZXYvamF2YQ==",
                      "irn": "irn:rc73dbh7q0:iamcore:4atcicnisg::group/dev/java",
                      "tenantID": "4atcicnisg",
                      "displayName": "Java",
                      "name": "java",
                      "path": "/dev",
                      "metadata": {
                        "location": "Kyiv"
                      },
                      "poolIDs": [
                        "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                      ],
                      "created": "2021-10-18T11:08:09.4919Z",
                      "updated": "2021-10-18T11:08:09.4919Z"
                    }
                  ],
                  "count": 1,
                  "page": 1,
                  "pageSize": 10
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      }
    },
    "/users/me/groups/{groupID}/add": {
      "parameters": [
        {
          "name": "groupID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Group ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpncm91cC9kZXYvamF2YQ=="
        }
      ],
      "post": {
        "description": "Adds currently authenticated user to the group.",
        "responses": {
          "204": {
            "description": "User successfully added to the group."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      }
    },
    "/users/me/groups/{groupID}/remove": {
      "parameters": [
        {
          "name": "groupID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Group ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpncm91cC9kZXYvamF2YQ=="
        }
      ],
      "post": {
        "description": "Removes currently authenticated from the group.",
        "responses": {
          "204": {
            "description": "User successfully removed from the group."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      }
    },
    "/users/me/groups/add": {
      "post": {
        "description": "Adds currently authenticated user to the groups.",
        "responses": {
          "200": {
            "description": "User is successfully added to groups."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GroupIDs"
              },
              "example": {
                "groupIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpncm91cC9kZXYvamF2YQ=="
                ]
              }
            }
          }
        }
      }
    },
    "/users/me/groups/remove": {
      "post": {
        "description": "Removes currently authenticated user from groups.",
        "responses": {
          "204": {
            "description": "User is successfully removed from groups."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "groupIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpncm91cC9kZXYvamF2YQ=="
                ]
              }
            }
          }
        }
      }
    },
    "/users/me/policies": {
      "get": {
        "description": "Retrieves identity policies that are attached to the currently authenticated user.",
        "responses": {
          "200": {
            "description": "Identity policies attached to the currently authenticated user are successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IdentityPoliciesResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb2xpY3kvYWxsb3ctYWxsLWFjdGlvbnMtb24tamVycnk=",
                      "irn": "irn:rc73dbh7q0:iamcore:4atcicnisg::policy/allow-all-actions-on-jerry",
                      "name": "allow-all-actions-on-jerry",
                      "description": "Allow all actions on Jerry",
                      "type": "identity",
                      "origin": "api",
                      "version": "1.0.0",
                      "statements": [
                        {
                          "description": "Allow all actions on Jerry",
                          "actions": [
                            "iamcore:user:*"
                          ],
                          "resources": [
                            "irn:rc73dbh7q0:iamcore:4atcicnisg::user/jerry"
                          ],
                          "effect": "allow"
                        }
                      ],
                      "poolIDs": [
                        "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                      ]
                    }
                  ],
                  "count": 1,
                  "page": 0,
                  "pageSize": 10
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "parameters": [
          {
            "name": "tenantID",
            "in": "query",
            "description": "Tenant ID.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "4atcicnisg"
          },
          {
            "name": "name",
            "in": "query",
            "description": "Policy name. Supports partial match.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "allow-all"
          }
        ]
      }
    },
    "/users/me/policies/eligible": {
      "get": {
        "description": "Retrieves identity policies that are eligible to be attached to the currently authenticated user.",
        "responses": {
          "200": {
            "description": "Identity policies that are eligible to be attached to the currently authenticated user are successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "data": [
                    {
                      "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb2xpY3kvYWxsb3ctYWxsLWFjdGlvbnMtb24tamVycnk=",
                      "irn": "irn:rc73dbh7q0:iamcore:4atcicnisg::policy/allow-all-actions-on-jerry",
                      "name": "allow-all-actions-on-jerry",
                      "description": "Allow all actions on Jerry",
                      "type": "identity",
                      "origin": "api",
                      "version": "1.0.0",
                      "statements": [
                        {
                          "description": "Allow all actions on Jerry",
                          "actions": [
                            "iamcore:user:*"
                          ],
                          "resources": [
                            "irn:rc73dbh7q0:iamcore:4atcicnisg::user/jerry"
                          ],
                          "effect": "allow"
                        }
                      ],
                      "poolIDs": [
                        "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                      ]
                    }
                  ],
                  "count": 1,
                  "page": 0,
                  "pageSize": 10
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "parameters": [
          {
            "name": "tenantID",
            "in": "query",
            "description": "Tenant ID.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "4atcicnisg"
          },
          {
            "name": "name",
            "in": "query",
            "description": "Policy name. Supports partial match.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "allow-all"
          }
        ]
      }
    },
    "/users/me/policies/attach": {
      "put": {
        "description": "Attaches the currently authenticated user to the policies.",
        "responses": {
          "204": {
            "description": "The user is successfully attached to the policies."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PolicyIDs"
              },
              "example": {
                "policyIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb2xpY3kvYWxsb3ctYWxsLWFjdGlvbnMtb24tamVycnk="
                ]
              }
            }
          }
        }
      }
    },
    "/users/me/policies/detach": {
      "post": {
        "description": "Detaches the currently authenticated user from policies.",
        "responses": {
          "204": {
            "description": "The user is successfully detached from the policies."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "policyIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb2xpY3kvYWxsb3ctYWxsLWFjdGlvbnMtb24tamVycnk="
                ]
              }
            }
          }
        }
      }
    },
    "/users/me/policy": {
      "get": {
        "description": "Retrieves currently authenticated user's resource policy.",
        "responses": {
          "200": {
            "description": "Currently authenticated user's resource policy is successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourcePolicyResponse"
                },
                "example": {
                  "data": {
                    "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0N2c1bDJpamMwOjp1c2VyL2plcnJ5",
                    "irn": "irn:rc73dbh7q0:iamcore:4atcicnisg::user/org1/tom",
                    "name": "irn:rc73dbh7q0:iamcore:4atcicnisg::user/org1/tom",
                    "description": "Individual resource policy",
                    "type": "resource",
                    "origin": "api",
                    "version": "1.0.0",
                    "statements": [
                      {
                        "description": "Allow Jerry everything on Tom user",
                        "actions": [
                          "*"
                        ],
                        "principals": [
                          "irn:rc73dbh7q0:iamcore:47g5l2ijc0::user/jerry"
                        ],
                        "effect": "allow"
                      }
                    ],
                    "poolIDs": [
                      "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                    ]
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      },
      "put": {
        "description": "Updates currently authenticated user's resource policy.",
        "responses": {
          "204": {
            "description": "Resource policy is successfully updated."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResourcePolicyUpdateRequest"
              },
              "example": {
                "description": "New policy description",
                "statements": [
                  {
                    "description": "Allow Jerry everything on the resource",
                    "actions": [
                      "*"
                    ],
                    "principals": [
                      "irn:rc73dbh7q0:iamcore:4atcicnisg::user/jerry"
                    ],
                    "effect": "allow"
                  }
                ],
                "poolIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                ]
              }
            }
          }
        }
      }
    },
    "/users/{userID}": {
      "parameters": [
        {
          "name": "userID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "User ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjp1c2VyL29yZzEvdG9t"
        }
      ],
      "get": {
        "description": "Retrieves a specific user.",
        "responses": {
          "200": {
            "description": "The user is successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "data": {
                    "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjp1c2VyL29yZzEvdG9t",
                    "created": "2021-10-18T08:47:54.219531Z",
                    "updated": "2021-10-18T08:47:54.219531Z",
                    "irn": "irn:rc73dbh7q0:iamcore:4atcicnisg::user/org1/tom",
                    "tenantID": "4atcicnisg",
                    "authID": "68a8372d-cc0a-4a42-8a56-099ac466e0bd",
                    "email": "tom@example.com",
                    "enabled": true,
                    "firstName": "Tom",
                    "lastName": "Jasper",
                    "username": "tom",
                    "path": "/org1",
                    "metadata": {
                      "language": "uk",
                      "age": 23
                    },
                    "poolIDs": [
                      "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                    ]
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      },
      "patch": {
        "description": "Updates a specific user.",
        "responses": {
          "204": {
            "description": "The user is successfully updated."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "firstName": "MorganUpdated",
                "lastName": "JosephUpdated",
                "email": "josephm@gmail.com",
                "enabled": true,
                "poolIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                ]
              }
            }
          }
        }
      },
      "delete": {
        "description": "Deletes a specific user.",
        "responses": {
          "204": {
            "description": "The user is successfully deleted."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      }
    },
    "/users/{userID}/metadata": {
      "parameters": [
        {
          "name": "userID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "User ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjp1c2VyL29yZzEvdG9t"
        }
      ],
      "put": {
        "description": "Updates metadata.",
        "responses": {
          "204": {
            "description": "Metadata is successfully updated."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {},
              "example": {
                "language": "uk",
                "timezone": "Europe/Kyiv"
              }
            }
          }
        }
      }
    },
    "/users/{userID}/password/change": {
      "parameters": [
        {
          "name": "userID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "User ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjp1c2VyL29yZzEvdG9t"
        }
      ],
      "post": {
        "description": "Changes the user's password.",
        "responses": {
          "204": {
            "description": "The user's password is successfully changed."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "oldPassword": "YesYkYKpLd6n3dVZ",
                "newPassword": "KPJ9KP33afQqG7ke",
                "confirmPassword": "KPJ9KP33afQqG7ke"
              }
            }
          }
        }
      }
    },
    "/users/{userID}/password/reset": {
      "parameters": [
        {
          "name": "userID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "User ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjp1c2VyL29yZzEvdG9t"
        }
      ],
      "post": {
        "description": "Resets the user's password.",
        "responses": {
          "204": {
            "description": "User password is successfully reset."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "newPassword": "hh8VkeHymc3j8NYJ",
                "confirmPassword": "hh8VkeHymc3j8NYJ"
              }
            }
          }
        }
      }
    },
    "/users/{userID}/password/forgot": {
      "parameters": [
        {
          "name": "userID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "User ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjp1c2VyL29yZzEvdG9t"
        }
      ],
      "put": {
        "description": "Send an email to the user with a link they can click to initiate the password recovery process.",
        "responses": {
          "204": {
            "description": "The password recovery request has been successfully processed."
          },
          "406": {
            "description": "Unable to process the password recovery request"
          }
        }
      }
    },
    "/users/{userID}/groups": {
      "parameters": [
        {
          "name": "userID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "User ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjp1c2VyL29yZzEvdG9t"
        }
      ],
      "get": {
        "description": "Gets membership groups.",
        "responses": {
          "200": {
            "description": "User's membership groups are successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "data": [
                    {
                      "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpncm91cC9kZXYvamF2YQ==",
                      "irn": "irn:rc73dbh7q0:iamcore:4atcicnisg::group/dev/java",
                      "tenantID": "4atcicnisg",
                      "displayName": "Java",
                      "name": "java",
                      "path": "/dev",
                      "metadata": {
                        "location": "Kyiv"
                      },
                      "poolIDs": [
                        "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                      ],
                      "created": "2021-10-18T11:08:09.4919Z",
                      "updated": "2021-10-18T11:08:09.4919Z"
                    }
                  ],
                  "count": 1,
                  "page": 1,
                  "pageSize": 10
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      }
    },
    "/users/{userID}/groups/add": {
      "parameters": [
        {
          "name": "userID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "User ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjp1c2VyL29yZzEvdG9t"
        }
      ],
      "post": {
        "description": "Adds the user to groups.",
        "responses": {
          "200": {
            "description": "User is successfully added to groups."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "groupIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpncm91cC9kZXYvamF2YQ=="
                ]
              }
            }
          }
        }
      }
    },
    "/users/{userID}/groups/remove": {
      "parameters": [
        {
          "name": "userID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "User ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjp1c2VyL29yZzEvdG9t"
        }
      ],
      "post": {
        "description": "Removes the user from groups.",
        "responses": {
          "204": {
            "description": "User is successfully removed from groups."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "groupIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpncm91cC9kZXYvamF2YQ=="
                ]
              }
            }
          }
        }
      }
    },
    "/users/{userID}/policies": {
      "parameters": [
        {
          "name": "userID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "User ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjp1c2VyL29yZzEvdG9t"
        }
      ],
      "get": {
        "description": "Retrieves identity policies attached to the user.",
        "responses": {
          "200": {
            "description": "Identity policies attached to the user are successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "data": [
                    {
                      "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb2xpY3kvYWxsb3ctYWxsLWFjdGlvbnMtb24tamVycnk=",
                      "irn": "irn:rc73dbh7q0:iamcore:4atcicnisg::policy/allow-all-actions-on-jerry",
                      "name": "allow-all-actions-on-jerry",
                      "description": "Allow all actions on Jerry",
                      "type": "identity",
                      "origin": "api",
                      "version": "1.0.0",
                      "statements": [
                        {
                          "description": "Allow all actions on Jerry",
                          "actions": [
                            "iamcore:user:*"
                          ],
                          "resources": [
                            "irn:rc73dbh7q0:iamcore:4atcicnisg::user/jerry"
                          ],
                          "effect": "allow"
                        }
                      ],
                      "poolIDs": [
                        "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                      ]
                    }
                  ],
                  "count": 1,
                  "page": 0,
                  "pageSize": 10
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "parameters": [
          {
            "name": "tenantID",
            "in": "query",
            "description": "Tenant ID.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "4atcicnisg"
          },
          {
            "name": "name",
            "in": "query",
            "description": "Policy name. Supports partial match.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "allow-all"
          }
        ]
      }
    },
    "/users/{userID}/policies/eligible": {
      "parameters": [
        {
          "name": "userID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "User ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjp1c2VyL29yZzEvdG9t"
        }
      ],
      "get": {
        "description": "Retrieves identity policies that are eligible to be attached to the user.",
        "responses": {
          "200": {
            "description": "Identity policies that are eligible to be attached to the user are successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "data": [
                    {
                      "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb2xpY3kvYWxsb3ctYWxsLWFjdGlvbnMtb24tamVycnk=",
                      "irn": "irn:rc73dbh7q0:iamcore:4atcicnisg::policy/allow-all-actions-on-jerry",
                      "name": "allow-all-actions-on-jerry",
                      "description": "Allow all actions on Jerry",
                      "type": "identity",
                      "origin": "api",
                      "version": "1.0.0",
                      "statements": [
                        {
                          "description": "Allow all actions on Jerry",
                          "actions": [
                            "iamcore:user:*"
                          ],
                          "resources": [
                            "irn:rc73dbh7q0:iamcore:4atcicnisg::user/jerry"
                          ],
                          "effect": "allow"
                        }
                      ],
                      "poolIDs": [
                        "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                      ]
                    }
                  ],
                  "count": 1,
                  "page": 0,
                  "pageSize": 10
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "parameters": [
          {
            "name": "tenantID",
            "in": "query",
            "description": "Tenant ID.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "4atcicnisg"
          },
          {
            "name": "name",
            "in": "query",
            "description": "Policy name. Supports partial match.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "allow-all"
          }
        ]
      }
    },
    "/users/{userID}/policies/attach": {
      "parameters": [
        {
          "name": "userID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "User ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjp1c2VyL29yZzEvdG9t"
        }
      ],
      "put": {
        "description": "Attaches user to policies.",
        "responses": {
          "204": {
            "description": "The user is successfully attached to the policies."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "policyIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb2xpY3kvYWxsb3ctYWxsLWFjdGlvbnMtb24tamVycnk="
                ]
              }
            }
          }
        }
      }
    },
    "/users/{userID}/policies/detach": {
      "parameters": [
        {
          "name": "userID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "User ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjp1c2VyL29yZzEvdG9t"
        }
      ],
      "post": {
        "description": "Detaches user from policies.",
        "responses": {
          "204": {
            "description": "The user is successfully detached from the policies."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "policyIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb2xpY3kvYWxsb3ctYWxsLWFjdGlvbnMtb24tamVycnk="
                ]
              }
            }
          }
        }
      }
    },
    "/users/{userID}/policy": {
      "parameters": [
        {
          "name": "userID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "User ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjp1c2VyL29yZzEvdG9t"
        }
      ],
      "get": {
        "description": "Retrieves user's resource policy.",
        "responses": {
          "200": {
            "description": "User's resource policy is successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "data": {
                    "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0N2c1bDJpamMwOjp1c2VyL2plcnJ5",
                    "irn": "irn:rc73dbh7q0:iamcore:4atcicnisg::user/org1/tom",
                    "name": "irn:rc73dbh7q0:iamcore:4atcicnisg::user/org1/tom",
                    "description": "Individual resource policy",
                    "type": "resource",
                    "origin": "api",
                    "version": "1.0.0",
                    "statements": [
                      {
                        "description": "Allow Jerry everything on Tom user",
                        "actions": [
                          "*"
                        ],
                        "principals": [
                          "irn:rc73dbh7q0:iamcore:47g5l2ijc0::user/jerry"
                        ],
                        "effect": "allow"
                      }
                    ],
                    "poolIDs": [
                      "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                    ]
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      },
      "put": {
        "description": "Updates user's resource policy.",
        "responses": {
          "204": {
            "description": "Resource policy is successfully updated."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "description": "New policy description",
                "statements": [
                  {
                    "description": "Allow Jerry everything on the resource",
                    "actions": [
                      "*"
                    ],
                    "principals": [
                      "irn:rc73dbh7q0:iamcore:4atcicnisg::user/jerry"
                    ],
                    "effect": "allow"
                  }
                ],
                "poolIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                ]
              }
            }
          }
        }
      }
    },
    "/groups": {
      "post": {
        "description": "Creates a new group.",
        "responses": {
          "201": {
            "description": "Group is successfully created.",
            "headers": {
              "Location": {
                "description": "URI in format `{schema}://{host}/api/v1/groups/{groupID}`",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "data": {
                    "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpncm91cC9kZXYvamF2YQ==",
                    "irn": "irn:rc73dbh7q0:iamcore:4atcicnisg::group/dev/java",
                    "tenantID": "4atcicnisg",
                    "displayName": "Java",
                    "name": "java",
                    "path": "/dev",
                    "metadata": {
                      "location": "Kyiv"
                    },
                    "poolIDs": [
                      "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                    ],
                    "created": "2021-10-18T11:08:09.4919Z",
                    "updated": "2021-10-18T11:08:09.4919Z"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GroupCreationRequest"
              },
              "example": {
                "name": "java",
                "displayName": "Java",
                "parentID": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpncm91cC9kZXY=",
                "tenantID": "4atcicnisg",
                "poolIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                ]
              }
            }
          }
        }
      },
      "get": {
        "description": "Returns group list.",
        "responses": {
          "200": {
            "description": "Groups are successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "data": [
                    {
                      "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpncm91cC9kZXYvamF2YQ==",
                      "irn": "irn:rc73dbh7q0:iamcore:4atcicnisg::group/dev/java",
                      "tenantID": "4atcicnisg",
                      "displayName": "Java",
                      "name": "java",
                      "path": "/dev",
                      "metadata": {
                        "location": "Kyiv"
                      },
                      "poolIDs": [
                        "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                      ],
                      "created": "2021-10-18T11:08:09.4919Z",
                      "updated": "2021-10-18T11:08:09.4919Z"
                    }
                  ],
                  "count": 1,
                  "page": 1,
                  "pageSize": 10
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "parameters": [
          {
            "name": "tenantID",
            "in": "query",
            "description": "Tenant ID.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "4atcicnisg"
          },
          {
            "name": "path",
            "in": "query",
            "description": "Group path. Supports wildcards `*`, e.g., `/org*` query param will match `/org`, `/org1`, `/org/sub-org`.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "/dev"
          },
          {
            "name": "displayName",
            "in": "query",
            "description": "Group display name. Supports partial match.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "Java"
          },
          {
            "name": "irn",
            "in": "query",
            "description": "Group IRN. Supports partial match.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "irn:rc73dbh7q0:iamcore:4atcicnisg::group/dev/java"
          }
        ]
      }
    },
    "/groups/delete": {
      "post": {
        "description": "Deletes groups in bulk.",
        "responses": {
          "204": {
            "description": "Groups are successfully deleted."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GroupsBulkDeleteRequest"
              },
              "example": {
                "groupIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpncm91cC9kZXYvamF2YQ=="
                ]
              }
            }
          }
        }
      }
    },
    "/groups/{groupID}": {
      "parameters": [
        {
          "name": "groupID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Group ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpncm91cC9kZXYvamF2YQ=="
        }
      ],
      "get": {
        "description": "Returns group information.",
        "responses": {
          "200": {
            "description": "Group successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "data": {
                    "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpncm91cC9kZXYvamF2YQ==",
                    "irn": "irn:rc73dbh7q0:iamcore:4atcicnisg::group/dev/java",
                    "tenantID": "4atcicnisg",
                    "displayName": "Java",
                    "name": "java",
                    "path": "/dev",
                    "metadata": {
                      "location": "Kyiv"
                    },
                    "poolIDs": [
                      "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                    ],
                    "created": "2021-10-18T11:08:09.4919Z",
                    "updated": "2021-10-18T11:08:09.4919Z"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      },
      "put": {
        "description": "Update group display name.",
        "responses": {
          "204": {
            "description": "Group display name successfully updated."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GroupUpdateRequest"
              },
              "example": {
                "displayName": "updated org1",
                "poolIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                ]
              }
            }
          }
        }
      },
      "delete": {
        "description": "Deletes a single group.",
        "responses": {
          "204": {
            "description": "Group is successfully deleted."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      }
    },
    "/groups/{groupID}/metadata": {
      "parameters": [
        {
          "name": "groupID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Group ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpncm91cC9kZXYvamF2YQ=="
        }
      ],
      "put": {
        "description": "Updates group metadata.",
        "responses": {
          "204": {
            "description": "Metadata is successfully updated."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {},
              "example": {
                "language": "uk",
                "timezone": "Europe/Kyiv"
              }
            }
          }
        }
      }
    },
    "/groups/{groupID}/members": {
      "parameters": [
        {
          "name": "groupID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Group ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpncm91cC9kZXYvamF2YQ=="
        }
      ],
      "get": {
        "description": "Returns group members.",
        "responses": {
          "200": {
            "description": "Members are successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "data": [
                    {
                      "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjp1c2VyL29yZzEvdG9t",
                      "created": "2021-10-18T08:47:54.219531Z",
                      "updated": "2021-10-18T08:47:54.219531Z",
                      "irn": "irn:rc73dbh7q0:iamcore:4atcicnisg::user/org1/tom",
                      "tenantID": "4atcicnisg",
                      "authID": "68a8372d-cc0a-4a42-8a56-099ac466e0bd",
                      "email": "tom@example.com",
                      "enabled": true,
                      "firstName": "Tom",
                      "lastName": "Jasper",
                      "username": "tom",
                      "path": "/org1",
                      "metadata": {
                        "language": "uk",
                        "age": 23
                      },
                      "poolIDs": [
                        "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                      ]
                    }
                  ],
                  "count": 1,
                  "page": 1,
                  "pageSize": 10
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      }
    },
    "/groups/{groupID}/members/eligible": {
      "parameters": [
        {
          "name": "groupID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Group ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpncm91cC9kZXYvamF2YQ=="
        }
      ],
      "get": {
        "description": "Returns eligible group members.",
        "responses": {
          "200": {
            "description": "Eligible group members are successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "data": [
                    {
                      "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjp1c2VyL29yZzEvdG9t",
                      "created": "2021-10-18T08:47:54.219531Z",
                      "updated": "2021-10-18T08:47:54.219531Z",
                      "irn": "irn:rc73dbh7q0:iamcore:4atcicnisg::user/org1/tom",
                      "tenantID": "4atcicnisg",
                      "authID": "68a8372d-cc0a-4a42-8a56-099ac466e0bd",
                      "email": "tom@example.com",
                      "enabled": true,
                      "firstName": "Tom",
                      "lastName": "Jasper",
                      "username": "tom",
                      "path": "/org1",
                      "metadata": {
                        "language": "uk",
                        "age": 23
                      },
                      "poolIDs": [
                        "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                      ]
                    }
                  ],
                  "count": 1,
                  "page": 1,
                  "pageSize": 10
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      }
    },
    "/groups/{groupID}/members/add": {
      "parameters": [
        {
          "name": "groupID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Group ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpncm91cC9kZXYvamF2YQ=="
        }
      ],
      "post": {
        "description": "Adds users to a group.",
        "responses": {
          "204": {
            "description": "Users are successfully added."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GroupAddMembersRequest"
              },
              "example": {
                "userIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjp1c2VyL2pvc2VwaG1vcmdhbg=="
                ]
              }
            }
          }
        }
      }
    },
    "/groups/{groupID}/members/remove": {
      "parameters": [
        {
          "name": "groupID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Group ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpncm91cC9kZXYvamF2YQ=="
        }
      ],
      "post": {
        "description": "Removes users from a group.",
        "responses": {
          "204": {
            "description": "Users are successfully removed."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GroupRemoveMembersRequest"
              },
              "example": {
                "userIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjp1c2VyL2pvc2VwaG1vcmdhbg=="
                ]
              }
            }
          }
        }
      }
    },
    "/groups/{groupID}/policies": {
      "parameters": [
        {
          "name": "groupID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Group ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpncm91cC9kZXYvamF2YQ=="
        }
      ],
      "get": {
        "description": "Retrieves identity policies that the group is attached to.",
        "responses": {
          "200": {
            "description": "Identity policies that the group is attached to are successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "data": [
                    {
                      "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb2xpY3kvYWxsb3ctYWxsLWFjdGlvbnMtb24tamVycnk=",
                      "irn": "irn:rc73dbh7q0:iamcore:4atcicnisg::policy/allow-all-actions-on-jerry",
                      "name": "allow-all-actions-on-jerry",
                      "description": "Allow all actions on Jerry",
                      "type": "identity",
                      "origin": "api",
                      "version": "1.0.0",
                      "statements": [
                        {
                          "description": "Allow all actions on Jerry",
                          "actions": [
                            "iamcore:user:*"
                          ],
                          "resources": [
                            "irn:rc73dbh7q0:iamcore:4atcicnisg::user/jerry"
                          ],
                          "effect": "allow"
                        }
                      ],
                      "poolIDs": [
                        "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                      ]
                    }
                  ],
                  "count": 1,
                  "page": 0,
                  "pageSize": 10
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "parameters": [
          {
            "name": "tenantID",
            "in": "query",
            "description": "Tenant ID.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "4atcicnisg"
          },
          {
            "name": "name",
            "in": "query",
            "description": "Policy name. Supports partial match.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "allow-all"
          }
        ]
      }
    },
    "/groups/{groupID}/policies/eligible": {
      "parameters": [
        {
          "name": "groupID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Group ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpncm91cC9kZXYvamF2YQ=="
        }
      ],
      "get": {
        "description": "Retrieves identity policies that the group is eligible to be attached to.",
        "responses": {
          "200": {
            "description": "Identity policies that the group is eligible to be attached to are successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "data": [
                    {
                      "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb2xpY3kvYWxsb3ctYWxsLWFjdGlvbnMtb24tamVycnk=",
                      "irn": "irn:rc73dbh7q0:iamcore:4atcicnisg::policy/allow-all-actions-on-jerry",
                      "name": "allow-all-actions-on-jerry",
                      "description": "Allow all actions on Jerry",
                      "type": "identity",
                      "origin": "api",
                      "version": "1.0.0",
                      "statements": [
                        {
                          "description": "Allow all actions on Jerry",
                          "actions": [
                            "iamcore:user:*"
                          ],
                          "resources": [
                            "irn:rc73dbh7q0:iamcore:4atcicnisg::user/jerry"
                          ],
                          "effect": "allow"
                        }
                      ],
                      "poolIDs": [
                        "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                      ]
                    }
                  ],
                  "count": 1,
                  "page": 0,
                  "pageSize": 10
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "parameters": [
          {
            "name": "tenantID",
            "in": "query",
            "description": "Tenant ID.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "4atcicnisg"
          },
          {
            "name": "name",
            "in": "query",
            "description": "Policy name. Supports partial match.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "allow-all"
          }
        ]
      }
    },
    "/groups/{groupID}/policies/attach": {
      "parameters": [
        {
          "name": "groupID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Group ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpncm91cC9kZXYvamF2YQ=="
        }
      ],
      "put": {
        "description": "Attaches policies to a group.",
        "responses": {
          "204": {
            "description": "Group is successfully attached to policies."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "policyIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb2xpY3kvYWxsb3ctYWxsLWFjdGlvbnMtb24tamVycnk="
                ]
              }
            }
          }
        }
      }
    },
    "/groups/{groupID}/policies/detach": {
      "parameters": [
        {
          "name": "groupID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Group ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpncm91cC9kZXYvamF2YQ=="
        }
      ],
      "post": {
        "description": "Detaches policies from a group.",
        "responses": {
          "204": {
            "description": "Group is successfully detached from policies."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "policyIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb2xpY3kvYWxsb3ctYWxsLWFjdGlvbnMtb24tamVycnk="
                ]
              }
            }
          }
        }
      }
    },
    "/groups/{groupID}/policy": {
      "parameters": [
        {
          "name": "groupID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Group ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpncm91cC9kZXYvamF2YQ=="
        }
      ],
      "get": {
        "description": "Retrieves group's resource policy.",
        "responses": {
          "200": {
            "description": "Group's resource policy is successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "data": {
                    "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpncm91cC9kZXY=",
                    "irn": "irn:rc73dbh7q0:iamcore:4atcicnisg::group/dev",
                    "name": "irn:rc73dbh7q0:iamcore:4atcicnisg::group/dev",
                    "description": "Individual resource policy",
                    "type": "resource",
                    "origin": "api",
                    "version": "1.0.0",
                    "statements": [
                      {
                        "description": "Allow Tom everything on dev group",
                        "actions": [
                          "*"
                        ],
                        "principals": [
                          "irn:rc73dbh7q0:iamcore:4atcicnisg::user/tom"
                        ],
                        "effect": "allow"
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      },
      "put": {
        "description": "Updates group's resource policy.",
        "responses": {
          "204": {
            "description": "Resource policy is successfully updated."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "description": "New policy description",
                "statements": [
                  {
                    "description": "Allow Jerry everything on the resource",
                    "actions": [
                      "*"
                    ],
                    "principals": [
                      "irn:rc73dbh7q0:iamcore:4atcicnisg::user/jerry"
                    ],
                    "effect": "allow"
                  }
                ],
                "poolIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                ]
              }
            }
          }
        }
      }
    },
    "/resources": {
      "post": {
        "description": "Creates a resource.",
        "responses": {
          "201": {
            "description": "Resource is successfully created.",
            "headers": {
              "Location": {
                "description": "URI in format `{schema}://{host}/api/v1/resources/{resourceID}`",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceResponse"
                },
                "example": {
                  "data": {
                    "id": "aXJuOnJjNzNkYmg3cTA6bXlhcHA6NGF0Y2ljbmlzZzo6ZGV2aWNlL2Rldi83ZTFlZGFkNS03ODQxLTRkMzgtYmRmMS1iZGM1NzViMGU5ODk=",
                    "irn": "irn:rc73dbh7q0:myapp:4atcicnisg::device/dev/7e1edad5-7841-4d38-bdf1-bdc575b0e989",
                    "created": "2022-10-25T22:22:17.390631+03:00",
                    "updated": "2022-10-25T22:22:17.390631+03:00",
                    "tenantID": "4atcicnisg",
                    "application": "myapp",
                    "name": "7e1edad5-7841-4d38-bdf1-bdc575b0e989",
                    "displayName": "Thermostat",
                    "path": "/dev",
                    "resourceType": "device",
                    "enabled": true,
                    "description": "Resource description",
                    "metadata": {
                      "temperature": 10,
                      "city": "Kyiv"
                    },
                    "poolIDs": [
                      "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                    ]
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResourceCreationRequest"
              },
              "example": {
                "name": "7e1edad5-7841-4d38-bdf1-bdc575b0e989",
                "displayName": "Thermostat",
                "tenantID": "4atcicnisg",
                "application": "myapp",
                "path": "/dev",
                "resourceType": "device",
                "enabled": true,
                "description": "Resource description",
                "metadata": {
                  "temperature": 10,
                  "city": "Kyiv"
                },
                "poolIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                ]
              }
            }
          }
        }
      },
      "get": {
        "description": "Returns resources.",
        "responses": {
          "200": {
            "description": "Resources are successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourcesResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": "aXJuOnJjNzNkYmg3cTA6bXlhcHA6NGF0Y2ljbmlzZzo6ZGV2aWNlL2Rldi83ZTFlZGFkNS03ODQxLTRkMzgtYmRmMS1iZGM1NzViMGU5ODk=",
                      "irn": "irn:rc73dbh7q0:myapp:4atcicnisg::device/dev/7e1edad5-7841-4d38-bdf1-bdc575b0e989",
                      "created": "2022-10-25T22:22:17.390631+03:00",
                      "updated": "2022-10-25T22:22:17.390631+03:00",
                      "tenantID": "4atcicnisg",
                      "application": "myapp",
                      "name": "7e1edad5-7841-4d38-bdf1-bdc575b0e989",
                      "displayName": "Thermostat",
                      "path": "/dev",
                      "resourceType": "device",
                      "enabled": true,
                      "description": "Resource description",
                      "metadata": {
                        "temperature": 10,
                        "city": "Kyiv"
                      },
                      "poolIDs": [
                        "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                      ]
                    }
                  ],
                  "count": 1,
                  "page": 1,
                  "pageSize": 100
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "parameters": [
          {
            "name": "resourceType",
            "in": "query",
            "description": "Resource type.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "device"
          },
          {
            "name": "application",
            "in": "query",
            "description": "Application that a resource belongs to.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "myapp"
          },
          {
            "name": "enabled",
            "in": "query",
            "description": "Is resource enabled.",
            "required": false,
            "schema": {
              "type": "boolean"
            },
            "example": true
          },
          {
            "name": "tenantID",
            "in": "query",
            "description": "Tenant ID. Supports partial match.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "4atcicnisg"
          },
          {
            "name": "path",
            "in": "query",
            "description": "Resource path. Supports wildcards `*`, e.g., `/org*` query param will match `/org`, `/org1`, `/org/sub-org`.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "/dev"
          },
          {
            "name": "displayName",
            "in": "query",
            "description": "Resource display name. Supports partial match.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "Thermostat"
          },
          {
            "name": "irn",
            "in": "query",
            "description": "Resource IRN. Supports partial match.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "irn:rc73dbh7q0:iamcore:4atcicnisg::device/dev/7e1edad5-7841-4d38-bdf1-bdc575b0e989"
          },
          {
            "name": "description",
            "in": "query",
            "description": "Resource description. Supports partial match.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "description"
          }
        ]
      }
    },
    "/resources/delete": {
      "post": {
        "description": "Deletes resources in bulk. \nAll the resources must belong to the same application and have the same resource type.\n",
        "responses": {
          "204": {
            "description": "Resources successfully deleted."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResourcesBulkDeleteRequest"
              },
              "example": {
                "resourceIDs": [
                  "aXJuOnJjNzNkYmg3cTA6bXlhcHA6NGF0Y2ljbmlzZzo6ZGV2aWNlL2Rldi83ZTFlZGFkNS03ODQxLTRkMzgtYmRmMS1iZGM1NzViMGU5ODk="
                ]
              }
            }
          }
        }
      }
    },
    "/resources/{resourceID}": {
      "parameters": [
        {
          "name": "resourceID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Resource ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6bXlhcHA6NGF0Y2ljbmlzZzo6ZGV2aWNlL2Rldi83ZTFlZGFkNS03ODQxLTRkMzgtYmRmMS1iZGM1NzViMGU5ODk="
        }
      ],
      "get": {
        "description": "Retrieves a resource.",
        "responses": {
          "200": {
            "description": "Resource is successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "data": {
                    "id": "aXJuOnJjNzNkYmg3cTA6bXlhcHA6NGF0Y2ljbmlzZzo6ZGV2aWNlL2Rldi83ZTFlZGFkNS03ODQxLTRkMzgtYmRmMS1iZGM1NzViMGU5ODk=",
                    "irn": "irn:rc73dbh7q0:myapp:4atcicnisg::device/dev/7e1edad5-7841-4d38-bdf1-bdc575b0e989",
                    "created": "2022-10-25T22:22:17.390631+03:00",
                    "updated": "2022-10-25T22:22:17.390631+03:00",
                    "tenantID": "4atcicnisg",
                    "application": "myapp",
                    "name": "7e1edad5-7841-4d38-bdf1-bdc575b0e989",
                    "displayName": "Thermostat",
                    "path": "/dev",
                    "resourceType": "device",
                    "enabled": true,
                    "description": "Resource description",
                    "metadata": {
                      "temperature": 10,
                      "city": "Kyiv"
                    },
                    "poolIDs": [
                      "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                    ]
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      },
      "patch": {
        "description": "Partially updates a resource.",
        "responses": {
          "204": {
            "description": "Resource is successfully updated."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResourceUpdateRequest"
              },
              "example": {
                "displayName": "Thermostat",
                "enabled": true,
                "description": "Resource description",
                "metadata": {
                  "temperature": 10,
                  "city": "Kyiv"
                },
                "poolIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                ]
              }
            }
          }
        }
      },
      "delete": {
        "description": "Deletes a single resource.",
        "responses": {
          "204": {
            "description": "Resource is successfully deleted."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      }
    },
    "/resources/{resourceID}/policy": {
      "parameters": [
        {
          "name": "resourceID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Resource ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6bXlhcHA6NGF0Y2ljbmlzZzo6ZGV2aWNlL2Rldi83ZTFlZGFkNS03ODQxLTRkMzgtYmRmMS1iZGM1NzViMGU5ODk="
        }
      ],
      "get": {
        "description": "Retrieves resource's policy.",
        "responses": {
          "200": {
            "description": "Resource policy is successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "data": {
                    "id": "aXJuOnJjNzNkYmg3cTA6bXlhcHA6NGF0Y2ljbmlzZzo6ZGV2aWNlL2Rldi83ZTFlZGFkNS03ODQxLTRkMzgtYmRmMS1iZGM1NzViMGU5ODk=",
                    "irn": "irn:rc73dbh7q0:myapp:4atcicnisg::device/dev/7e1edad5-7841-4d38-bdf1-bdc575b0e989",
                    "name": "irn:rc73dbh7q0:myapp:4atcicnisg::device/dev/7e1edad5-7841-4d38-bdf1-bdc575b0e989",
                    "description": "Individual resource policy",
                    "type": "resource",
                    "origin": "api",
                    "version": "1.0.0",
                    "statements": [
                      {
                        "description": "Allow Jerry everything on the resource",
                        "actions": [
                          "*"
                        ],
                        "principals": [
                          "irn:rc73dbh7q0:iamcore:4atcicnisg::user/jerry"
                        ],
                        "effect": "allow"
                      }
                    ],
                    "poolIDs": [
                      "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                    ]
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      },
      "put": {
        "description": "Updates resource's policy.",
        "responses": {
          "204": {
            "description": "Resource's policy is successfully updated."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "description": "New policy description",
                "statements": [
                  {
                    "description": "Allow Jerry everything on the resource",
                    "actions": [
                      "*"
                    ],
                    "principals": [
                      "irn:rc73dbh7q0:iamcore:4atcicnisg::user/jerry"
                    ],
                    "effect": "allow"
                  }
                ],
                "poolIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                ]
              }
            }
          }
        }
      }
    },
    "/resources/{resourceID}/pools/eligible": {
      "parameters": [
        {
          "name": "resourceID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Resource ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6bXlhcHA6NGF0Y2ljbmlzZzo6ZGV2aWNlL2Rldi83ZTFlZGFkNS03ODQxLTRkMzgtYmRmMS1iZGM1NzViMGU5ODk="
        }
      ],
      "get": {
        "description": "Returns list of pool IDs that are eligible for the authenticated principal for updating,\nand that are not already attached to the resource.\nThe list is filtered by the requested action.\n",
        "responses": {
          "200": {
            "description": "List of pool IDs that are eligible for the authenticated principal.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PoolIDsResponse"
                },
                "example": {
                  "data": [
                    "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg==",
                    "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL3Byb2Q="
                  ],
                  "count": 2,
                  "page": 1,
                  "pageSize": 100
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      }
    },
    "/resources/evaluate": {
      "post": {
        "description": "Evaluates permission to execute an action on a list of resources.\nReturns list of resources, to which currently authenticated principal has the requested action granted.\n",
        "responses": {
          "200": {
            "description": "Currently authenticated principal is authorized for action on resources.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": [
                  "irn:rc73dbh7q0:iamcore:4atcicnisg::user/tom",
                  "irn:rc73dbh7q0:iamcore:4atcicnisg::user/jerry"
                ]
              }
            }
          },
          "403": {
            "description": "The `filterResources` parameter is disabled, \nand currently authenticated principal is not authorized for action on at least one requested resource.\n"
          },
          "404": {
            "description": "Requested resources do not exist.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": [
                  "irn:rc73dbh7q0:iamcore:4atcicnisg::user/tom",
                  "irn:rc73dbh7q0:iamcore:4atcicnisg::user/jerry"
                ]
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "parameters": [
          {
            "name": "filterResources",
            "in": "query",
            "description": "If enabled, filters requested resources and returns a subset, to which principal has the requested action granted.",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "example": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EvaluateRequest"
              },
              "example": {
                "action": "iamcore:user:read",
                "resources": [
                  "irn:rc73dbh7q0:iamcore:4atcicnisg::user/tom",
                  "irn:rc73dbh7q0:iamcore:4atcicnisg::user/jerry"
                ]
              }
            }
          }
        }
      }
    },
    "/evaluate": {
      "post": {
        "description": "Evaluates permission to execute an action on a list of IRNs.\nReturns list of requested IRNs, to which currently authenticated principal has the requested action granted.\n",
        "responses": {
          "200": {
            "description": "Currently authenticated principal is authorized for action on resource IRNs.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": [
                  "irn:rc73dbh7q0:iamcore:4atcicnisg::user/tom",
                  "irn:rc73dbh7q0:iamcore:4atcicnisg::user/jerry"
                ]
              }
            }
          },
          "403": {
            "description": "The `filterResources` parameter is disabled, \nand currently authenticated principal is not authorized for action on at least one requested IRN.\n"
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "parameters": [
          {
            "name": "filterResources",
            "in": "query",
            "description": "If enabled, filters requested resources and returns a subset, to which principal has the requested action granted.",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "example": true
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "action": "iamcore:user:read",
                "resources": [
                  "irn:rc73dbh7q0:iamcore:4atcicnisg::user/tom",
                  "irn:rc73dbh7q0:iamcore:4atcicnisg::user/jerry"
                ]
              }
            }
          }
        }
      }
    },
    "/evaluate/resources": {
      "post": {
        "description": "Returns all resource IRNs that the currently authenticated principal is authorized for with the requested action.\nIn case no authorized resources exist, empty array is returned.\n",
        "responses": {
          "200": {
            "description": "List of authorized resource IRNs.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EvaluateOnResourceTypeResponse"
                },
                "example": {
                  "data": [
                    "irn:rc73dbh7q0:myapp:4atcicnisg::device/dev/fcdd2d70-e4fc-4762-965c-ffc829a19b0a",
                    "irn:rc73dbh7q0:myapp:4atcicnisg::device/dev/7e1edad5-7841-4d38-bdf1-bdc575b0e989",
                    "irn:rc73dbh7q0:myapp:4atcicnisg::device/1ff6f1ae-5712-11ed-9b6a-0242ac120002",
                    "irn:rc73dbh7q0:myapp:4atcicnisg::device/2644ce6e-5712-11ed-9b6a-0242ac120002"
                  ],
                  "count": 4,
                  "page": 1,
                  "pageSize": 100
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EvaluateOnResourceTypeRequest"
              },
              "example": {
                "application": "myapp",
                "action": "myapp:device:read",
                "resourceType": "device"
              }
            }
          }
        }
      }
    },
    "/evaluate/actions": {
      "post": {
        "description": "Evaluates permitted actions on IRNs.\nFilters actions that are allowed on requested IRNs.\nAn action is considered to be allowed if the currently authenticated principal is authorized on resource IRN.\n",
        "responses": {
          "200": {
            "description": "List of authorized actions by IRNs.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "irn:rc73dbh7q0:iamcore:4atcicnisg::group/*": [
                    "iamcore:group:read"
                  ],
                  "irn:rc73dbh7q0:myapp:4atcicnisg::user/tom": [
                    "iamcore:user:read"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EvaluateActionsOnIRNsRequest"
              },
              "example": {
                "actions": [
                  "iamcore:group:read",
                  "iamcore:user:read"
                ],
                "irns": [
                  "irn:rc73dbh7q0:iamcore:4atcicnisg::group/*",
                  "irn:rc73dbh7q0:myapp:4atcicnisg::user/tom"
                ]
              }
            }
          }
        }
      }
    },
    "/evaluate/irns/actions": {
      "post": {
        "description": "Evaluates actions on IRNs for currently authenticated principal.\nReturns a map of actions to their corresponding permitted and prohibited IRNs that match the requested IRNs.\n",
        "responses": {
          "200": {
            "description": "Lists of permitted and prohibited IRNs by action.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "iamcore:group:read": {
                    "allowed": [
                      "irn:rc73dbh7q0:iamcore:4atcicnisg::group/dev1/*",
                      "irn:rc73dbh7q0:iamcore:4atcicnisg::group/dev2"
                    ],
                    "denied": [
                      "irn:rc73dbh7q0:iamcore:4atcicnisg::group/dev1/java"
                    ]
                  },
                  "iamcore:group:update": {
                    "allowed": [],
                    "denied": [
                      "irn:rc73dbh7q0:iamcore:4atcicnisg::group/*"
                    ]
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "actions": [
                  "iamcore:group:read",
                  "iamcore:group:update"
                ],
                "irns": [
                  "irn:rc73dbh7q0:iamcore:4atcicnisg::group/dev1/*",
                  "irn:rc73dbh7q0:iamcore:4atcicnisg::group/dev2"
                ]
              }
            }
          }
        }
      }
    },
    "/evaluate/debug/resources": {
      "post": {
        "description": "Evaluates actions on a resource list for a specific principal.\nReturns resource IDs with the overall evaluation decision (`deny` or `allow`), detailed evaluation decision per requested action, and a list of policies that deny or allow action on that resource.\n",
        "responses": {
          "200": {
            "description": null,
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DebugEvaluationOnResourceListResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpncm91cC9kZXYvamF2YQ==",
                      "irn": "irn:rc73dbh7q0:iamcore:4atcicnisg::group/dev/java",
                      "decision": "deny",
                      "actions": [
                        {
                          "action": "iamcore:group:read",
                          "decision": "deny",
                          "allowPolicies": [
                            "irn:rc73dbh7q0:iamcore:4atcicnisg::policy/allow-java-group-read",
                            "irn:rc73dbh7q0:iamcore:4atcicnisg::policy/allow-all-on-java-group"
                          ],
                          "denyPolicies": [
                            "irn:rc73dbh7q0:iamcore:4atcicnisg::policy/deny-java-group-read-for-jerry"
                          ]
                        },
                        {
                          "action": "iamcore:group:update",
                          "decision": "allow",
                          "allowPolicies": [
                            "irn:rc73dbh7q0:iamcore:4atcicnisg::policy/allow-java-group-update",
                            "irn:rc73dbh7q0:iamcore:4atcicnisg::policy/allow-all-on-java-group"
                          ]
                        }
                      ]
                    },
                    {
                      "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpncm91cC9kZXYva290bGlu",
                      "irn": "irn:rc73dbh7q0:iamcore:4atcicnisg::group/dev/kotlin",
                      "decision": "allow",
                      "actions": [
                        {
                          "action": "iamcore:group:read",
                          "decision": "allow",
                          "allowPolicies": [
                            "irn:rc73dbh7q0:iamcore:4atcicnisg::policy/allow-kotlin-group-read"
                          ]
                        },
                        {
                          "action": "iamcore:group:update",
                          "decision": "allow",
                          "allowPolicies": [
                            "irn:rc73dbh7q0:iamcore:4atcicnisg::policy/allow-kotlin-group-update"
                          ]
                        }
                      ]
                    }
                  ],
                  "evaluationTimeMillis": 43
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DebugEvaluationOnResourceListRequest"
              },
              "example": {
                "application": "iamcore",
                "principal": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjp1c2VyL2plcnJ5",
                "actions": [
                  "iamcore:group:read",
                  "iamcore:group:update"
                ],
                "resources": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpncm91cC9kZXYvamF2YQ==",
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpncm91cC9kZXYva290bGlu"
                ]
              }
            }
          }
        }
      }
    },
    "/evaluate/debug/resources/type": {
      "post": {
        "description": "Evaluates actions on all resources of specific type in a tenant for a specific principal.\nReturns resource IDs with the evaluation decision (`deny` or `allow`) and a list of policies that deny or allow requested action on that resource.\n",
        "responses": {
          "200": {
            "description": null,
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DebugEvaluationOnResourceTypeResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpncm91cC9kZXYvamF2YQ==",
                      "irn": "irn:rc73dbh7q0:iamcore:4atcicnisg::group/dev/java",
                      "decision": "deny",
                      "actions": [
                        {
                          "action": "iamcore:group:read",
                          "decision": "deny",
                          "allowPolicies": [
                            "irn:rc73dbh7q0:iamcore:4atcicnisg::policy/allow-java-group-read",
                            "irn:rc73dbh7q0:iamcore:4atcicnisg::policy/allow-all-on-java-group"
                          ],
                          "denyPolicies": [
                            "irn:rc73dbh7q0:iamcore:4atcicnisg::policy/deny-java-group-read-for-jerry"
                          ]
                        },
                        {
                          "action": "iamcore:group:update",
                          "decision": "allow",
                          "allowPolicies": [
                            "irn:rc73dbh7q0:iamcore:4atcicnisg::policy/allow-java-group-update",
                            "irn:rc73dbh7q0:iamcore:4atcicnisg::policy/allow-all-on-java-group"
                          ]
                        }
                      ]
                    },
                    {
                      "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpncm91cC9kZXYva290bGlu",
                      "irn": "irn:rc73dbh7q0:iamcore:4atcicnisg::group/dev/kotlin",
                      "decision": "allow",
                      "actions": [
                        {
                          "action": "iamcore:group:read",
                          "decision": "allow",
                          "allowPolicies": [
                            "irn:rc73dbh7q0:iamcore:4atcicnisg::policy/allow-kotlin-group-read"
                          ]
                        },
                        {
                          "action": "iamcore:group:update",
                          "decision": "allow",
                          "allowPolicies": [
                            "irn:rc73dbh7q0:iamcore:4atcicnisg::policy/allow-kotlin-group-update"
                          ]
                        }
                      ]
                    }
                  ],
                  "evaluationTimeMillis": 43,
                  "count": 2,
                  "page": 1,
                  "pageSize": 10
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DebugEvaluationOnResourceTypeRequest"
              },
              "example": {
                "application": "iamcore",
                "tenantID": "4atcicnisg",
                "principal": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjp1c2VyL2plcnJ5",
                "actions": [
                  "iamcore:group:update",
                  "iamcore:group:read"
                ],
                "resourceType": "group"
              }
            }
          }
        }
      }
    },
    "/policies": {
      "post": {
        "description": "Creates policy.",
        "responses": {
          "201": {
            "description": "Policy is successfully created.",
            "headers": {
              "Location": {
                "description": "URI in format `{schema}://{host}/api/v1/policies/{policyID}`",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IdentityPolicyResponse"
                },
                "example": {
                  "data": {
                    "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb2xpY3kvYWxsb3ctYWxsLWFjdGlvbnMtb24tamVycnk=",
                    "irn": "irn:rc73dbh7q0:iamcore:4atcicnisg::policy/allow-all-actions-on-jerry",
                    "name": "allow-all-actions-on-jerry",
                    "description": "Allow all actions on Jerry",
                    "type": "identity",
                    "origin": "api",
                    "version": "1.0.0",
                    "statements": [
                      {
                        "actions": [
                          "iamcore:user:*"
                        ],
                        "resources": [
                          "irn:rc73dbh7q0:iamcore:4atcicnisg::user/jerry"
                        ],
                        "effect": "allow",
                        "description": "Allow all actions on Jerry"
                      }
                    ],
                    "poolIDs": [
                      "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                    ]
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PolicyCreationRequest"
              },
              "example": {
                "name": "allow-all-actions-on-jerry",
                "level": "tenant",
                "description": "Allow all actions on Jerry",
                "statements": [
                  {
                    "actions": [
                      "iamcore:user:*"
                    ],
                    "resources": [
                      "irn:rc73dbh7q0:iamcore:4atcicnisg::user/jerry"
                    ],
                    "effect": "allow",
                    "description": "Allow all actions on Jerry"
                  }
                ],
                "poolIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                ]
              }
            }
          }
        }
      },
      "get": {
        "description": "Returns policies.",
        "responses": {
          "200": {
            "description": "Policies are successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "data": [
                    {
                      "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb2xpY3kvYWxsb3ctYWxsLWFjdGlvbnMtb24tamVycnk=",
                      "irn": "irn:rc73dbh7q0:iamcore:4atcicnisg::policy/allow-all-actions-on-jerry",
                      "name": "allow-all-actions-on-jerry",
                      "description": "Allow all actions on Jerry",
                      "type": "identity",
                      "origin": "api",
                      "version": "1.0.0",
                      "statements": [
                        {
                          "description": "Allow all actions on Jerry",
                          "actions": [
                            "iamcore:user:*"
                          ],
                          "resources": [
                            "irn:rc73dbh7q0:iamcore:4atcicnisg::user/jerry"
                          ],
                          "effect": "allow"
                        }
                      ],
                      "poolIDs": [
                        "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                      ]
                    }
                  ],
                  "count": 1,
                  "page": 0,
                  "pageSize": 10
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "parameters": [
          {
            "name": "name",
            "in": "query",
            "description": "Policy name. Supports partial match.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "allow-all-actions-on-jerry"
          },
          {
            "name": "level",
            "in": "query",
            "description": "Policy level type.",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "account",
                "tenant"
              ]
            },
            "example": "tenant"
          },
          {
            "name": "description",
            "in": "query",
            "description": "Policy description. Supports partial match.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "Allow all actions on Jerry"
          },
          {
            "name": "irn",
            "in": "query",
            "description": "Policy IRN. Supports partial match.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "irn:rc73dbh7q0:iamcore:4atcicnisg::policy/allow-all-actions-on-jerry"
          }
        ]
      }
    },
    "/policies/{policyID}": {
      "parameters": [
        {
          "name": "policyID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Policy ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb2xpY3kvYWxsb3ctYWxsLWFjdGlvbnMtb24tamVycnk="
        }
      ],
      "get": {
        "description": "Returns policy.",
        "responses": {
          "200": {
            "description": "Policy is successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "data": {
                    "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb2xpY3kvYWxsb3ctYWxsLWFjdGlvbnMtb24tamVycnk=",
                    "irn": "irn:rc73dbh7q0:iamcore:4atcicnisg::policy/allow-all-actions-on-jerry",
                    "name": "allow-all-actions-on-jerry",
                    "description": "Allow all actions on Jerry",
                    "type": "identity",
                    "origin": "api",
                    "version": "1.0.0",
                    "statements": [
                      {
                        "actions": [
                          "iamcore:user:*"
                        ],
                        "resources": [
                          "irn:rc73dbh7q0:iamcore:4atcicnisg::user/jerry"
                        ],
                        "effect": "allow",
                        "description": "Allow all actions on Jerry"
                      }
                    ],
                    "poolIDs": [
                      "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                    ]
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      },
      "put": {
        "description": "Updates policy.",
        "responses": {
          "204": {
            "description": "Policy is successfully updated."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PolicyUpdateRequest"
              },
              "example": {
                "description": "Jerry management policy",
                "statements": [
                  {
                    "description": "Allow read, update, delete on Jerry",
                    "effect": "allow",
                    "actions": [
                      "iamcore:user:read",
                      "iamcore:user:update",
                      "iamcore:user:delete"
                    ],
                    "resources": [
                      "irn:rc73dbh7q0:iamcore:4atcicnisg::user/jerry"
                    ]
                  }
                ],
                "poolIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                ]
              }
            }
          }
        }
      },
      "delete": {
        "description": "Deletes policy.",
        "responses": {
          "204": {
            "description": "Policy is successfully deleted."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      }
    },
    "/policies/{policyID}/principals": {
      "parameters": [
        {
          "name": "policyID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Policy ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb2xpY3kvYWxsb3ctYWxsLWFjdGlvbnMtb24tamVycnk="
        }
      ],
      "get": {
        "description": "Returns principal IRNs attached to the policy.",
        "responses": {
          "200": {
            "description": "Principals are successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrincipalIRNsResponse"
                },
                "example": {
                  "data": [
                    "irn:rc73dbh7q0:iamcore:4atcicnisg::user/jerry",
                    "irn:rc73dbh7q0:iamcore:4atcicnisg::user/joseph"
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      }
    },
    "/tenants": {
      "get": {
        "description": "Retrieves tenants.",
        "responses": {
          "200": {
            "description": "Tenants are successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TenantsResponse"
                },
                "example": {
                  "data": [
                    {
                      "resourceID": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0N2c1bDJpamMwOjp0ZW5hbnQvNDdnNWwyaWpjMA==",
                      "irn": "irn:rc73dbh7q0:iamcore:47g5l2ijc0::tenant/47g5l2ijc0",
                      "tenantID": "47g5l2ijc0",
                      "name": "my-tenant",
                      "displayName": "My tenant",
                      "loginTheme": "My theme",
                      "issuerType": "iamcore",
                      "userMetadataUiSchema": {
                        "key": "val"
                      },
                      "groupMetadataUiSchema": {
                        "key": "val"
                      },
                      "created": "2021-10-18T12:27:15.55267632Z",
                      "updated": "2021-10-18T12:27:15.55267632Z"
                    }
                  ],
                  "count": 1,
                  "page": 1,
                  "pageSize": 10
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "parameters": [
          {
            "name": "irn",
            "in": "query",
            "description": "Resource IRN. Supports partial match.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "irn:ce3pi5sbcv:iamcore:47g5l2ijc0::tenant/47g5l2ijc0"
          },
          {
            "name": "tenantID",
            "in": "query",
            "description": "Tenant ID. Supports partial match.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "47g5l2ijc0"
          },
          {
            "name": "name",
            "in": "query",
            "description": "Tenant name. Supports partial match.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "my-tenant"
          },
          {
            "name": "displayName",
            "in": "query",
            "description": "Tenant display name. Supports partial match.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "My tenant"
          },
          {
            "name": "issuerType",
            "in": "query",
            "description": "Tenant issuer type. Supports partial match.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "iamcore"
          }
        ]
      }
    },
    "/tenants/issuers": {
      "get": {
        "description": "Retrieves tenant's issuers.",
        "responses": {
          "200": {
            "description": "Issuers are successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IssuersResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0N2c1bDJpamMwOjppc3N1ZXIvaWFtY29yZQ==",
                      "irn": "irn:rc73dbh7q0:iamcore:47g5l2ijc0::issuer/iamcore",
                      "name": "iamcore",
                      "type": "iamcore",
                      "url": "https://iamcore.io/auth",
                      "loginURL": "https://iamcore.io/login",
                      "clientID": "a04583ab-cdc5-4991-ad1c-1e5555adea7e"
                    }
                  ]
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "tenant",
            "in": "query",
            "description": "Tenant name or ID.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "my-tenant"
          },
          {
            "name": "account",
            "in": "query",
            "description": "Account ID to consider tenant in.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "rc73dbh7q0"
          }
        ]
      }
    },
    "/tenants/issuer-types/iamcore": {
      "post": {
        "description": "Creates a new tenant using iamcore as an issuer of the tenant JWT tokens.",
        "responses": {
          "201": {
            "description": "Tenant is successfully created.",
            "headers": {
              "Location": {
                "description": "URI in format `{schema}://{host}/api/v1/tenants/{tenantID}`",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TenantResponseData"
                },
                "example": {
                  "data": {
                    "resourceID": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0N2c1bDJpamMwOjp0ZW5hbnQvNDdnNWwyaWpjMA==",
                    "irn": "irn:rc73dbh7q0:iamcore:47g5l2ijc0::tenant/47g5l2ijc0",
                    "tenantID": "47g5l2ijc0",
                    "name": "my-tenant",
                    "displayName": "My tenant",
                    "loginTheme": "My theme",
                    "issuerType": "iamcore",
                    "userMetadataUiSchema": {
                      "key": "val"
                    },
                    "groupMetadataUiSchema": {
                      "key": "val"
                    },
                    "created": "2021-10-18T12:27:15.55267632Z",
                    "updated": "2021-10-18T12:27:15.55267632Z"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TenantCreationWithIamcoreIssuerTypeRequest"
              },
              "example": {
                "name": "my-tenant",
                "displayName": "My tenant",
                "loginTheme": "My theme",
                "userMetadataUiSchema": {
                  "key": "val"
                },
                "groupMetadataUiSchema": {
                  "key": "val"
                }
              }
            }
          }
        }
      }
    },
    "/tenants/{resourceID}": {
      "parameters": [
        {
          "name": "resourceID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Tenant ID.",
          "example": "a3JuOnJjNzM5Z2dnZzA6aWFtY29yZTo0N2c1bDJpamMwOjp0ZW5hbnQvNDdnNWwyaWpjMA=="
        }
      ],
      "get": {
        "description": "Retrieves a specific tenant.",
        "responses": {
          "200": {
            "description": "Tenant is successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "data": {
                    "resourceID": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0N2c1bDJpamMwOjp0ZW5hbnQvNDdnNWwyaWpjMA==",
                    "irn": "irn:rc73dbh7q0:iamcore:47g5l2ijc0::tenant/47g5l2ijc0",
                    "tenantID": "47g5l2ijc0",
                    "name": "my-tenant",
                    "displayName": "My tenant",
                    "loginTheme": "My theme",
                    "issuerType": "iamcore",
                    "userMetadataUiSchema": {
                      "key": "val"
                    },
                    "groupMetadataUiSchema": {
                      "key": "val"
                    },
                    "created": "2021-10-18T12:27:15.55267632Z",
                    "updated": "2021-10-18T12:27:15.55267632Z"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      },
      "put": {
        "description": "Updates a specific tenant.",
        "responses": {
          "204": {
            "description": "Tenant is successfully updated."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TenantUpdateRequest"
              },
              "example": {
                "displayName": "New display name",
                "userMetadataUiSchema": {
                  "key": "val"
                },
                "groupMetadataUiSchema": {
                  "key": "val"
                }
              }
            }
          }
        }
      },
      "delete": {
        "description": "Deletes tenant.",
        "responses": {
          "204": {
            "description": "Tenant is successfully deleted."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      }
    },
    "/tenants/{resourceID}/issuer-types/iamcore/issuers": {
      "parameters": [
        {
          "name": "resourceID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Tenant ID.",
          "example": "a3JuOnJjNzM5Z2dnZzA6aWFtY29yZTo0N2c1bDJpamMwOjp0ZW5hbnQvNDdnNWwyaWpjMA=="
        }
      ],
      "post": {
        "description": "Creates a new issuer in the tenant.",
        "responses": {
          "201": {
            "description": "Issuer is successfully created.",
            "headers": {
              "Location": {
                "description": "URI in format `{schema}://{host}/api/v1/tenants/{resourceID}/issuers/{issuerID}`",
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IssuerCreateRequest"
              },
              "example": {
                "name": "my-issuer"
              }
            }
          }
        }
      }
    },
    "/tenants/{resourceID}/issuer-types/iamcore/issuers/{issuerID}/settings": {
      "parameters": [
        {
          "name": "resourceID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Tenant ID.",
          "example": "a3JuOnJjNzM5Z2dnZzA6aWFtY29yZTo0N2c1bDJpamMwOjp0ZW5hbnQvNDdnNWwyaWpjMA=="
        }
      ],
      "get": {
        "description": "Retrieves tenant's issuer settings of iamcore type.",
        "responses": {
          "200": {
            "description": "Tenant's issuer settings are successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IamcoreIssuerSettingsResponseData"
                },
                "example": {
                  "data": {
                    "redirectURIs": [
                      "*",
                      "http://localhost:4200"
                    ]
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      },
      "put": {
        "description": "Updates tenant's issuer settings of iamcore type.",
        "responses": {
          "204": {
            "description": "Tenant's issuer settings are successfully updated."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IamcoreIssuerSettingsUpdateRequest"
              },
              "example": {
                "redirectURIs": [
                  "*",
                  "http://localhost:4200"
                ]
              }
            }
          }
        }
      }
    },
    "/tenants/{tenantID}/email-templates": {
      "parameters": [
        {
          "name": "tenantID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Tenant ID.",
          "example": "47g5l2ijc0"
        }
      ],
      "get": {
        "description": "Retrieves all email templates for the tenant.",
        "responses": {
          "200": {
            "description": "Email templates are successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailTemplatesResponse"
                },
                "example": {
                  "data": [
                    {
                      "type": "reset-password",
                      "subject": "Reset password",
                      "template": "<!DOCTYPE html><html><body><p><a href={{link}}>Link to reset password</a><p> This link will expire within {{linkExpirationTime}}.</body></html>"
                    },
                    {
                      "type": "verify-email",
                      "template": "<!DOCTYPE html><html><body><p><a href={{link}}>Link to verify your e-mail address</a><p>This link is valid for {{linkExpirationTime}}.</body></html>"
                    }
                  ]
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      }
    },
    "/tenants/{tenantID}/email-templates/{type}": {
      "parameters": [
        {
          "name": "tenantID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Tenant ID.",
          "example": "47g5l2ijc0"
        },
        {
          "name": "type",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Type of the email template.",
          "example": "reset-password"
        }
      ],
      "put": {
        "description": "Creates or updates an email template.",
        "responses": {
          "204": {
            "description": "Email template successfully saved."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmailTemplateRequest"
              },
              "example": {
                "subject": "Reset password",
                "template": "<!DOCTYPE html><html><body><p><a href={{link}}>Link to reset password</a><p> This link will expire within {{linkExpirationTime}}.</body></html>"
              }
            }
          }
        }
      },
      "get": {
        "description": "Retrieves a specific email template.",
        "responses": {
          "200": {
            "description": "Email template is successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailTemplateResponse"
                },
                "example": {
                  "data": {
                    "type": "reset-password",
                    "subject": "Reset password",
                    "template": "<!DOCTYPE html><html><body><p><a href={{link}}>Link to reset password</a><p> This link will expire within {{linkExpirationTime}}.</body></html>"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      }
    },
    "/tenants/policy": {
      "get": {
        "description": "Retrieves tenant's resource policy.",
        "responses": {
          "200": {
            "description": "Tenant's resource policy is successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "data": {
                    "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjp0ZW5hbnQvNGF0Y2ljbmlzZw==",
                    "irn": "irn:rc73dbh7q0:iamcore:4atcicnisg::tenant/4atcicnisg",
                    "name": "irn:rc73dbh7q0:iamcore:4atcicnisg::tenant/4atcicnisg",
                    "description": "Individual resource policy",
                    "type": "resource",
                    "origin": "api",
                    "version": "1.0.0",
                    "statements": [
                      {
                        "description": "Allow Tom everything on tenant",
                        "actions": [
                          "*"
                        ],
                        "principals": [
                          "irn:rc73dbh7q0:iamcore:4atcicnisg::user/tom"
                        ],
                        "effect": "allow"
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      },
      "put": {
        "description": "Updates tenant's resource policy.",
        "responses": {
          "204": {
            "description": "Resource policy is successfully updated."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "description": "New policy description",
                "statements": [
                  {
                    "description": "Allow Jerry everything on the resource",
                    "actions": [
                      "*"
                    ],
                    "principals": [
                      "irn:rc73dbh7q0:iamcore:4atcicnisg::user/jerry"
                    ],
                    "effect": "allow"
                  }
                ],
                "poolIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                ]
              }
            }
          }
        }
      }
    },
    "/accounts": {
      "post": {
        "description": "Creates a new account.",
        "responses": {
          "201": {
            "description": "Account is successfully created.",
            "headers": {
              "Location": {
                "description": "URI in format `{schema}://{host}/api/v1/accounts/{accountID}`",
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AccountCreationRequest"
              },
              "example": {
                "email": "acme@acme.com",
                "password": "!l*k4y24NgH%",
                "confirmPassword": "!l*k4y24NgH%"
              }
            }
          }
        }
      }
    },
    "/accounts/{accountID}/profile": {
      "parameters": [
        {
          "name": "accountID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Account ID.",
          "example": "aXJuOjRhdGNpY25pc2c6aWFtY29yZTo6OmFjY291bnQvNGF0Y2ljbmlzZw=="
        }
      ],
      "get": {
        "description": "Retrieves a specific account`s profile.",
        "responses": {
          "200": {
            "description": "Account`s profile is successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountProfileResponse"
                },
                "example": {
                  "data": {
                    "accountType": "company",
                    "firstName": "Tom",
                    "lastName": "Jasper",
                    "companyName": "Acme Inc.",
                    "jobCategory": "Software Engineer",
                    "industry": "Technology",
                    "country": "United States"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      },
      "put": {
        "description": "Updates a specific account`s profile.",
        "responses": {
          "204": {
            "description": "Account`s profile is successfully updated."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AccountProfileUpdateRequest"
              },
              "example": {
                "accountType": "company",
                "firstName": "Tom",
                "lastName": "Jasper",
                "companyName": "Acme Inc.",
                "jobCategory": "Software Engineer",
                "industry": "Technology",
                "country": "United States"
              }
            }
          }
        }
      }
    },
    "/applications": {
      "post": {
        "description": "Creates a new application.",
        "responses": {
          "201": {
            "description": "Application is successfully created.",
            "headers": {
              "Location": {
                "description": "URI in format `{schema}://{host}/api/v1/applications/{applicationID}`",
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ApplicationCreationRequest"
              },
              "example": {
                "name": "myapp",
                "displayName": "My app name"
              }
            }
          }
        }
      },
      "get": {
        "description": "Retrieves applications.",
        "responses": {
          "200": {
            "description": "Applications are successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApplicationsResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo6OmFwcGxpY2F0aW9uL215YXBw",
                      "irn": "irn:rc73dbh7q0:iamcore:::application/myapp",
                      "name": "myapp",
                      "displayName": "My app name",
                      "created": "2021-10-18T12:27:15.55267632Z",
                      "updated": "2021-10-18T12:27:15.55267632Z"
                    }
                  ],
                  "count": 1,
                  "page": 1,
                  "pageSize": 10
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "parameters": [
          {
            "name": "irn",
            "in": "query",
            "description": "Application IRN. Supports partial match.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "irn:4atcicnisg:iamcore:::application/myapp"
          },
          {
            "name": "name",
            "in": "query",
            "description": "Application name. Supports partial match.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "myapp"
          },
          {
            "name": "displayName",
            "in": "query",
            "description": "Application display name. Supports partial match.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "My app"
          }
        ]
      }
    },
    "/applications/{applicationID}": {
      "parameters": [
        {
          "name": "applicationID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Application ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo6OmFwcGxpY2F0aW9uL215YXBw"
        }
      ],
      "get": {
        "description": "Retrieves a specific application.",
        "responses": {
          "200": {
            "description": "Application is successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApplicationResponseData"
                },
                "example": {
                  "data": {
                    "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo6OmFwcGxpY2F0aW9uL215YXBw",
                    "irn": "irn:rc73dbh7q0:iamcore:::application/myapp",
                    "name": "myapp",
                    "displayName": "My app name",
                    "created": "2021-10-18T12:27:15.55267632Z",
                    "updated": "2021-10-18T12:27:15.55267632Z"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      },
      "put": {
        "description": "Updates a specific application.",
        "responses": {
          "204": {
            "description": "Application is successfully updated."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ApplicationUpdateRequest"
              },
              "example": {
                "displayName": "New display name"
              }
            }
          }
        }
      }
    },
    "/applications/{applicationID}/resource-types": {
      "parameters": [
        {
          "name": "applicationID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Application ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo6OmFwcGxpY2F0aW9uL215YXBw"
        }
      ],
      "post": {
        "description": "Creates a new resource type.",
        "responses": {
          "201": {
            "description": "Resource type is successfully created.",
            "headers": {
              "Location": {
                "description": "URI in format `{schema}://{host}/api/v1/applications/{applicationID}/resource-types/{resourceTypeID}`",
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResourceTypeCreationRequest"
              },
              "example": {
                "type": "document",
                "description": "Representation of the 'document' resource type",
                "actionPrefix": "document",
                "operations": [
                  "sign",
                  "export"
                ]
              }
            }
          }
        }
      },
      "get": {
        "description": "Retrieves resource types.",
        "responses": {
          "200": {
            "description": "Resource types are successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceTypesResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": "aXJuOnJjNzNkYmg3cTA6bXlhcHA6OjpyZXNvdXJjZS10eXBlL2RvY3VtZW50",
                      "irn": "irn:rc73dbh7q0:myapp:::resource-type/document",
                      "type": "document",
                      "description": "Representation of the 'document' resource type",
                      "actionPrefix": "document",
                      "created": "2021-10-18T12:27:15.55267632Z",
                      "updated": "2021-10-18T12:27:15.55267632Z",
                      "operations": [
                        "sign",
                        "export"
                      ]
                    }
                  ],
                  "count": 1,
                  "page": 1,
                  "pageSize": 10
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      }
    },
    "/applications/{applicationID}/resource-types/{resourceTypeID}": {
      "parameters": [
        {
          "name": "applicationID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Application ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo6OmFwcGxpY2F0aW9uL215YXBw"
        },
        {
          "name": "resourceTypeID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Resource type ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6bXlhcHA6OjpyZXNvdXJjZS10eXBlL2RvY3VtZW50"
        }
      ],
      "get": {
        "description": "Retrieves a specific resource type.",
        "responses": {
          "200": {
            "description": "Resource type is successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResourceTypeResponseData"
                },
                "example": {
                  "data": {
                    "id": "aXJuOnJjNzNkYmg3cTA6bXlhcHA6OjpyZXNvdXJjZS10eXBlL2RvY3VtZW50",
                    "irn": "irn:rc73dbh7q0:myapp:::resource-type/document",
                    "type": "document",
                    "description": "Representation of the 'document' resource type",
                    "actionPrefix": "document",
                    "created": "2021-10-18T12:27:15.55267632Z",
                    "updated": "2021-10-18T12:27:15.55267632Z",
                    "operations": [
                      "sign",
                      "export"
                    ]
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      },
      "put": {
        "description": "Updates a specific resource type.",
        "responses": {
          "204": {
            "description": "Resource type is successfully updated."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResourceTypeUpdateRequest"
              },
              "example": {
                "description": "Representation of the 'document' resource type",
                "actionPrefix": "document",
                "operations": [
                  "sign",
                  "export"
                ]
              }
            }
          }
        }
      }
    },
    "/applications/{applicationID}/policy": {
      "parameters": [
        {
          "name": "applicationID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Application ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo6OmFwcGxpY2F0aW9uL215YXBw"
        }
      ],
      "get": {
        "description": "Retrieves application's resource policy.",
        "responses": {
          "200": {
            "description": "Application's resource policy is successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "data": {
                    "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo6OmFwcGxpY2F0aW9uL215YXBw",
                    "irn": "irn:rc73dbh7q0:iamcore:::application/myapp",
                    "name": "irn:rc73dbh7q0:iamcore:::application/myapp",
                    "description": "Resource policy",
                    "type": "resource",
                    "origin": "api",
                    "version": "1.0.0",
                    "statements": [
                      {
                        "description": "Allow Tom everything on application",
                        "actions": [
                          "*"
                        ],
                        "principals": [
                          "irn:rc73dbh7q0:iamcore:root::user/tom"
                        ],
                        "effect": "allow"
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      },
      "put": {
        "description": "Updates application's resource policy.",
        "responses": {
          "204": {
            "description": "Application's resource policy is successfully updated."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "description": "New policy description",
                "statements": [
                  {
                    "description": "Allow Jerry everything on the application",
                    "actions": [
                      "*"
                    ],
                    "principals": [
                      "irn:rc73dbh7q0:iamcore:4atcicnisg::user/jerry"
                    ],
                    "effect": "allow"
                  }
                ]
              }
            }
          }
        }
      }
    },
    "/applications/{applicationID}/policies": {
      "parameters": [
        {
          "name": "applicationID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Application ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo6OmFwcGxpY2F0aW9uL215YXBw"
        }
      ],
      "get": {
        "description": "Retrieves identity policies that the application is attached to.",
        "responses": {
          "200": {
            "description": "Identity policies that the application is attached to are successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "data": [
                    {
                      "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb2xpY3kvYWxsb3ctYWxsLWFjdGlvbnMtb24tamVycnk=",
                      "irn": "irn:rc73dbh7q0:iamcore:4atcicnisg::policy/allow-all-actions-on-jerry",
                      "name": "allow-all-actions-on-jerry",
                      "description": "Allow all actions on Jerry",
                      "type": "identity",
                      "origin": "api",
                      "version": "1.0.0",
                      "statements": [
                        {
                          "description": "Allow all actions on Jerry",
                          "actions": [
                            "iamcore:user:*"
                          ],
                          "resources": [
                            "irn:rc73dbh7q0:iamcore:4atcicnisg::user/jerry"
                          ],
                          "effect": "allow"
                        }
                      ],
                      "poolIDs": [
                        "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                      ]
                    }
                  ],
                  "count": 1,
                  "page": 0,
                  "pageSize": 10
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "parameters": [
          {
            "name": "tenantID",
            "in": "query",
            "description": "Tenant ID.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "4atcicnisg"
          },
          {
            "name": "name",
            "in": "query",
            "description": "Policy name. Supports partial match.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "allow-all"
          }
        ]
      }
    },
    "/applications/{applicationID}/policies/attach": {
      "parameters": [
        {
          "name": "applicationID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Application ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo6OmFwcGxpY2F0aW9uL215YXBw"
        }
      ],
      "put": {
        "description": "Attaches policies to an application.",
        "responses": {
          "204": {
            "description": "Application is successfully attached to policies."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "policyIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb2xpY3kvYWxsb3ctYWxsLWFjdGlvbnMtb24tamVycnk="
                ]
              }
            }
          }
        }
      }
    },
    "/applications/{applicationID}/policies/detach": {
      "parameters": [
        {
          "name": "applicationID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Application ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo6OmFwcGxpY2F0aW9uL215YXBw"
        }
      ],
      "put": {
        "description": "Detaches policies from an application.",
        "responses": {
          "204": {
            "description": "Application is successfully detached from policies."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "policyIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb2xpY3kvYWxsb3ctYWxsLWFjdGlvbnMtb24tamVycnk="
                ]
              }
            }
          }
        }
      }
    },
    "/applications/{applicationID}/policies/eligible": {
      "parameters": [
        {
          "name": "applicationID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Application ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo6OmFwcGxpY2F0aW9uL215YXBw"
        }
      ],
      "get": {
        "description": "Retrieves identity policies that the application is eligible to be attached to.",
        "responses": {
          "200": {
            "description": "Identity policies that the application is eligible to be attached to are successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "data": [
                    {
                      "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb2xpY3kvYWxsb3ctYWxsLWFjdGlvbnMtb24tamVycnk=",
                      "irn": "irn:rc73dbh7q0:iamcore:4atcicnisg::policy/allow-all-actions-on-jerry",
                      "name": "allow-all-actions-on-jerry",
                      "description": "Allow all actions on Jerry",
                      "type": "identity",
                      "origin": "api",
                      "version": "1.0.0",
                      "statements": [
                        {
                          "description": "Allow all actions on Jerry",
                          "actions": [
                            "iamcore:user:*"
                          ],
                          "resources": [
                            "irn:rc73dbh7q0:iamcore:4atcicnisg::user/jerry"
                          ],
                          "effect": "allow"
                        }
                      ],
                      "poolIDs": [
                        "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                      ]
                    }
                  ],
                  "count": 1,
                  "page": 0,
                  "pageSize": 10
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "parameters": [
          {
            "name": "tenantID",
            "in": "query",
            "description": "Tenant ID.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "4atcicnisg"
          },
          {
            "name": "name",
            "in": "query",
            "description": "Policy name. Supports partial match.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "allow-all"
          }
        ]
      }
    },
    "/pools": {
      "post": {
        "description": "Creates a new pool.",
        "responses": {
          "201": {
            "description": "Pool is successfully created.",
            "headers": {
              "Location": {
                "description": "URI in format `{schema}://{host}/api/v1/pools/{poolID}`",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PoolResponse"
                },
                "example": {
                  "data": {
                    "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL3Byb2QvYWRtaW4=",
                    "irn": "irn:rc73dbh7q0:iamcore:4atcicnisg::pool/prod/admin",
                    "name": "admin",
                    "resources": [
                      "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjp1c2VyL3RvbQ=="
                    ]
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PoolCreationRequest"
              },
              "example": {
                "name": "admin",
                "tenantID": "4atcicnisg",
                "parentID": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL3Byb2Q=",
                "resourceIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjp1c2VyL3RvbQ=="
                ]
              }
            }
          }
        }
      },
      "get": {
        "description": "Returns pool list.",
        "responses": {
          "200": {
            "description": "Pools are successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PoolsResponse"
                },
                "example": {
                  "data": [
                    {
                      "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL3Byb2QvYWRtaW4=",
                      "irn": "irn:rc73dbh7q0:iamcore:4atcicnisg::pool/prod/admin",
                      "name": "admin",
                      "resources": [
                        "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjp1c2VyL3RvbQ=="
                      ]
                    }
                  ],
                  "count": 1,
                  "page": 1,
                  "pageSize": 10
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "parameters": [
          {
            "name": "name",
            "in": "query",
            "description": "Pool name. Supports partial match.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "prod"
          },
          {
            "name": "irn",
            "in": "query",
            "description": "Pool IRN. Supports partial match.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "irn:rc73dbh7q0:iamcore:4atcicnisg::pool/prod"
          },
          {
            "name": "resourceIRN",
            "in": "query",
            "description": "Resource IRN attached to pools. Can be wildcard. Supports partial match.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "irn:rc73dbh7q0:iamcore:4atcicnisg::user/*"
          }
        ]
      }
    },
    "/pools/delete": {
      "post": {
        "description": "Bulk deletes pools and their associated child pools.",
        "responses": {
          "204": {
            "description": "Pools are successfully deleted."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PoolIDsRequest"
              },
              "example": {
                "poolIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg==",
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL3Byb2Q="
                ]
              }
            }
          }
        }
      }
    },
    "/pools/{poolID}": {
      "parameters": [
        {
          "name": "poolID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Pool ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL3Byb2QvYWRtaW4="
        }
      ],
      "get": {
        "description": "Returns pool information.",
        "responses": {
          "200": {
            "description": "Pool successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "data": {
                    "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL3Byb2QvYWRtaW4=",
                    "irn": "irn:rc73dbh7q0:iamcore:4atcicnisg::pool/prod/admin",
                    "name": "admin",
                    "resources": [
                      "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjp1c2VyL3RvbQ=="
                    ]
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      },
      "put": {
        "description": "Update pool.",
        "responses": {
          "204": {
            "description": "Pool successfully updated."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResourceIDsRequest"
              },
              "example": {
                "resourceIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjp1c2VyL2Jlbg=="
                ]
              }
            }
          }
        }
      },
      "delete": {
        "description": "Deletes a pool and associated child pools.",
        "responses": {
          "204": {
            "description": "Pool is successfully deleted."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      }
    },
    "/pools/{poolID}/attach": {
      "parameters": [
        {
          "name": "poolID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Pool ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL3Byb2QvYWRtaW4="
        }
      ],
      "put": {
        "description": "Attache resources to pool.",
        "responses": {
          "204": {
            "description": "Resources successfully attached to pool."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "resourceIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjp1c2VyL2Jlbg=="
                ]
              }
            }
          }
        }
      }
    },
    "/pools/{poolID}/detach": {
      "parameters": [
        {
          "name": "poolID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Pool ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL3Byb2QvYWRtaW4="
        }
      ],
      "put": {
        "description": "Detach resources to pool.",
        "responses": {
          "204": {
            "description": "Resources successfully detached from pool."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "resourceIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjp1c2VyL2Jlbg=="
                ]
              }
            }
          }
        }
      }
    },
    "/pools/{poolID}/resources/eligible": {
      "parameters": [
        {
          "name": "poolID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Pool ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL3Byb2QvYWRtaW4="
        }
      ],
      "get": {
        "description": "Retrieves resources that are eligible to be attached to the pool.",
        "responses": {
          "200": {
            "description": "Resources that are eligible to be attached to the pool are successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "data": [
                    "irn:rc73dbh7q0:myapp:4atcicnisg::device/dev/fcdd2d70-e4fc-4762-965c-ffc829a19b0a",
                    "irn:rc73dbh7q0:myapp:4atcicnisg::device/dev/7e1edad5-7841-4d38-bdf1-bdc575b0e989",
                    "irn:rc73dbh7q0:myapp:4atcicnisg::device/1ff6f1ae-5712-11ed-9b6a-0242ac120002",
                    "irn:rc73dbh7q0:myapp:4atcicnisg::device/2644ce6e-5712-11ed-9b6a-0242ac120002"
                  ],
                  "count": 4,
                  "page": 1,
                  "pageSize": 100
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "resourceType",
            "in": "query",
            "description": "Resource type.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "device"
          },
          {
            "name": "application",
            "in": "query",
            "description": "Application that a resources belongs to.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "myapp"
          },
          {
            "name": "tenantID",
            "in": "query",
            "description": "Tenant ID.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "4atcicnisg"
          }
        ]
      }
    },
    "/pools/attach/resource/{resourceID}": {
      "parameters": [
        {
          "name": "resourceID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Resource ID.",
          "example": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjp1c2VyL2Jlbg=="
        }
      ],
      "put": {
        "description": "Attaches a resource to pools.",
        "responses": {
          "204": {
            "description": "Resource successfully attached to pools."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "poolIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg==",
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL3Byb2Q="
                ]
              }
            }
          }
        }
      }
    },
    "/anonymous/policies/attach": {
      "put": {
        "description": "Attaches the anonymous principal to the policies.",
        "responses": {
          "204": {
            "description": "The anonymous principal is successfully attached to the policies."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "policyIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb2xpY3kvYWxsb3ctYWxsLWFjdGlvbnMtb24tamVycnk="
                ]
              }
            }
          }
        }
      }
    },
    "/anonymous/policies/detach": {
      "post": {
        "description": "Detaches the anonymous principal from policies.",
        "responses": {
          "204": {
            "description": "The anonymous principal is successfully detached from the policies."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "policyIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb2xpY3kvYWxsb3ctYWxsLWFjdGlvbnMtb24tamVycnk="
                ]
              }
            }
          }
        }
      }
    },
    "/principals/{principalID}/api-keys": {
      "post": {
        "description": "Creates API key for principal.",
        "responses": {
          "201": {
            "description": "API key is successfully created.",
            "headers": {
              "Location": {
                "description": "URI in format `{schema}://{host}/api/v1/principals/{principalID}/api-keys/{apiKey}`",
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      },
      "get": {
        "description": "Retrieves principal's API keys.",
        "responses": {
          "200": {
            "description": "Principal's API keys are successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiKeysResponse"
                },
                "example": {
                  "data": [
                    {
                      "apiKey": "5D8g3hFbK7YpZ9cE2qXsW6vRoA1TnI4uM0ljOJNtViUmkQzx989gSkadh23hga14",
                      "state": "active",
                      "lastUsed": "2021-10-19T17:57:31.14492667Z",
                      "created": "2021-10-18T12:27:15.55267632Z",
                      "updated": "2021-10-18T12:27:15.55267632Z"
                    }
                  ],
                  "count": 1,
                  "page": 1,
                  "pageSize": 10
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "parameters": [
          {
            "name": "state",
            "in": "query",
            "description": "API key state.",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "active",
                "suspended",
                "revoked"
              ]
            },
            "example": "suspended"
          }
        ]
      }
    },
    "/principals/{principalID}/api-keys/{apiKey}": {
      "parameters": [
        {
          "name": "apiKey",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "API key.",
          "example": "2W9Xv6Ae7y0nHf8Mb1JdKc5Tl4sZgIzNtEjPuSqOxDhYi3LrpQmGkFVbCh94ygh6"
        }
      ],
      "get": {
        "description": "Retrieves principal's API key.",
        "responses": {
          "200": {
            "description": "Principal's API key is successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiKeyResponseData"
                },
                "example": {
                  "data": {
                    "apiKey": "2W9Xv6Ae7y0nHf8Mb1JdKc5Tl4sZgIzNtEjPuSqOxDhYi3LrpQmGkFVbCh94ygh6",
                    "state": "active",
                    "lastUsed": "2021-10-19T17:57:31.14492667Z",
                    "created": "2021-10-18T12:27:15.55267632Z",
                    "updated": "2021-10-18T12:27:15.55267632Z"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ]
      },
      "put": {
        "description": "Updates an API key.",
        "responses": {
          "204": {
            "description": "Principal's API key is successfully updated."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ApiKeyUpdateRequest"
              },
              "example": {
                "state": "revoked"
              }
            }
          }
        }
      }
    },
    "/roles/{roleID}/policies": {
      "parameters": [
        {
          "name": "roleID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Role ID.",
          "example": "aXJuOjRhdGNpY25pc2c6aWFtY29yZTo6OmFjY291bnQvNGF0Y2ljbmlzZw=="
        }
      ],
      "get": {
        "description": "Retrieves identity policies that are attached to the role.",
        "responses": {
          "200": {
            "description": "Identity policies attached to the role are successfully retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                },
                "example": {
                  "data": [
                    {
                      "id": "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb2xpY3kvYWxsb3ctYWxsLWFjdGlvbnMtb24tamVycnk=",
                      "irn": "irn:rc73dbh7q0:iamcore:4atcicnisg::policy/allow-all-actions-on-jerry",
                      "name": "allow-all-actions-on-jerry",
                      "description": "Allow all actions on Jerry",
                      "type": "identity",
                      "origin": "api",
                      "version": "1.0.0",
                      "statements": [
                        {
                          "description": "Allow all actions on Jerry",
                          "actions": [
                            "iamcore:user:*"
                          ],
                          "resources": [
                            "irn:rc73dbh7q0:iamcore:4atcicnisg::user/jerry"
                          ],
                          "effect": "allow"
                        }
                      ],
                      "poolIDs": [
                        "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb29sL2Rldg=="
                      ]
                    }
                  ],
                  "count": 1,
                  "page": 0,
                  "pageSize": 10
                }
              }
            }
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "parameters": [
          {
            "name": "name",
            "in": "query",
            "description": "Policy name. Supports partial match.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "allow-all"
          }
        ]
      }
    },
    "/roles/{roleID}/policies/attach": {
      "parameters": [
        {
          "name": "roleID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Role ID.",
          "example": "aXJuOjRhdGNpY25pc2c6aWFtY29yZTo6OmFjY291bnQvNGF0Y2ljbmlzZw=="
        }
      ],
      "put": {
        "description": "Attaches policies to the role.",
        "responses": {
          "204": {
            "description": "The policies are successfully attached to the role."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "policyIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb2xpY3kvYWxsb3ctYWxsLWFjdGlvbnMtb24tamVycnk="
                ]
              }
            }
          }
        }
      }
    },
    "/roles/{roleID}/policies/detach": {
      "parameters": [
        {
          "name": "roleID",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Role ID.",
          "example": "aXJuOjRhdGNpY25pc2c6aWFtY29yZTo6OmFjY291bnQvNGF0Y2ljbmlzZw=="
        }
      ],
      "put": {
        "description": "Detaches policies from the role.",
        "responses": {
          "204": {
            "description": "The policies are successfully detached from the role."
          }
        },
        "security": [
          {
            "iamcore": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "policyIDs": [
                  "aXJuOnJjNzNkYmg3cTA6aWFtY29yZTo0YXRjaWNuaXNnOjpwb2xpY3kvYWxsb3ctYWxsLWFjdGlvbnMtb24tamVycnk="
                ]
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "iamcore": {
        "type": "oauth2",
        "description": "iamcore supports JWT access tokens for authenticating and authorizing API requests.\n",
        "flows": {
          "implicit": {
            "authorizationUrl": "https://auth.example.com/oauth/authorize",
            "scopes": {}
          }
        }
      }
    },
    "schemas": {
      "UserCreationRequest": {
        "type": "object",
        "properties": {
          "firstName": {
            "type": "string",
            "description": "User first name."
          },
          "lastName": {
            "type": "string",
            "description": "User last name."
          },
          "email": {
            "type": "string",
            "description": "User email.",
            "pattern": "^[a-z0-9]+[\\._]?[a-z0-9]+[@][a-z]+[.][a-z]{2,3}$"
          },
          "username": {
            "type": "string",
            "description": "Username.",
            "pattern": "^[a-zA-Z0-9_\\-@.]*$"
          },
          "password": {
            "type": "string",
            "description": "User password."
          },
          "confirmPassword": {
            "type": "string",
            "description": "Confirmation of user password."
          },
          "enabled": {
            "type": "boolean",
            "description": "Whether the user is enabled or not. Default is `false`."
          },
          "path": {
            "type": "string",
            "description": "User path that will be used in IRN.",
            "pattern": "^/\\S*$"
          },
          "poolIDs": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Pool IDs the user will be attached to."
          },
          "requiredActions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Require an action when the user logs in.\n<p>\n<ul>\n  <li>`VERIFY_EMAIL` - sends an email to the user to verify their email address</li>\n  <li>`UPDATE_PASSWORD` - requires user to enter in a new password</li>\n</ul>\n"
          }
        },
        "required": [
          "email",
          "password",
          "confirmPassword"
        ]
      },
      "UserResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "User ID."
          },
          "created": {
            "type": "string",
            "format": "rfc3339",
            "description": "User creation date."
          },
          "updated": {
            "type": "string",
            "format": "rfc3339",
            "description": "User update date."
          },
          "irn": {
            "type": "string",
            "description": "User IRN.",
            "pattern": "^[a-zA-Z0-9_\\-/:*@.]*$"
          },
          "tenantID": {
            "type": "string",
            "description": "Tenant ID that user belongs to."
          },
          "authID": {
            "type": "string",
            "description": "User issuer ID."
          },
          "email": {
            "type": "string",
            "description": "User email.",
            "pattern": "^[a-z0-9]+[\\._]?[a-z0-9]+[@][a-z]+[.][a-z]{2,3}$"
          },
          "enabled": {
            "type": "boolean",
            "description": "Whether the user is enabled or not."
          },
          "firstName": {
            "type": "string",
            "description": "Firstname.",
            "pattern": "^[a-zA-Z0-9_\\-@.]*$"
          },
          "lastName": {
            "type": "string",
            "description": "Lastname.",
            "pattern": "^[a-zA-Z0-9_\\-@.]*$"
          },
          "username": {
            "type": "string",
            "description": "Username.",
            "pattern": "^[a-zA-Z0-9_\\-@.]*$"
          },
          "path": {
            "type": "string",
            "description": "User path that is used in IRN.",
            "pattern": "^/\\S*$"
          },
          "metadata": {
            "type": "object",
            "description": "User metadata."
          },
          "requiredActions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Require an action when the user logs in.\n<p>\n<ul>\n  <li>`VERIFY_EMAIL` - sends an email to the user to verify their email address</li>\n  <li>`UPDATE_PASSWORD` - requires user to enter in a new password</li>\n</ul>\n"
          },
          "poolIDs": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Identifiers of the associated pools."
          }
        },
        "required": [
          "id",
          "created",
          "updated",
          "irn",
          "tenantID",
          "authID",
          "enabled",
          "firstName",
          "lastName",
          "username",
          "path"
        ]
      },
      "UsersResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "count": {
            "type": "integer",
            "description": "Total number of users."
          },
          "page": {
            "type": "integer",
            "description": "Page number."
          },
          "pageSize": {
            "type": "integer",
            "description": "Total returned elements."
          }
        },
        "required": [
          "count",
          "page",
          "pageSize"
        ]
      },
      "UserPathsResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "UsersBulkDeleteRequest": {
        "type": "object",
        "properties": {
          "userIDs": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "userIDs"
        ]
      },
      "UserUpdateRequest": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "description": "User email.",
            "pattern": "^[a-z0-9]+[\\._]?[a-z0-9]+[@][a-z]+[.][a-z]{2,3}$"
          },
          "firstName": {
            "type": "string",
            "description": "User first name."
          },
          "lastName": {
            "type": "string",
            "description": "User last name."
          },
          "enabled": {
            "type": "boolean",
            "description": "Whether the user is enabled or not."
          },
          "requiredActions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Require an action when the user logs in.\n<p>\n<ul>\n  <li>`VERIFY_EMAIL` - sends an email to the user to verify their email address</li>\n  <li>`UPDATE_PASSWORD` - requires user to enter in a new password</li>\n</ul>\n"
          },
          "poolIDs": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Identifiers of the associated pools."
          }
        }
      },
      "UserIRNResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "string"
          }
        },
        "required": [
          "data"
        ]
      },
      "UserPasswordChangeRequest": {
        "type": "object",
        "properties": {
          "oldPassword": {
            "type": "string",
            "description": "User old password."
          },
          "newPassword": {
            "type": "string",
            "description": "User new password."
          },
          "confirmPassword": {
            "type": "string",
            "description": "User new password confirmation."
          }
        },
        "required": [
          "oldPassword",
          "newPassword",
          "confirmPassword"
        ]
      },
      "UserPasswordResetRequest": {
        "type": "object",
        "properties": {
          "newPassword": {
            "type": "string",
            "description": "User new password."
          },
          "confirmPassword": {
            "type": "string",
            "description": "User new password confirmation."
          }
        },
        "required": [
          "newPassword",
          "confirmPassword"
        ]
      },
      "GroupResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Group ID."
          },
          "tenantID": {
            "type": "string",
            "description": "Tenant ID of the group."
          },
          "name": {
            "type": "string",
            "description": "Group name.",
            "pattern": "^[a-zA-Z0-9_\\-@.]*$"
          },
          "displayName": {
            "type": "string",
            "description": "Group display name."
          },
          "path": {
            "type": "string",
            "description": "Group path.",
            "pattern": "^/\\S*$"
          },
          "irn": {
            "type": "string",
            "description": "Group IRN.",
            "pattern": "^[a-zA-Z0-9_\\-/:*@.]*$"
          },
          "metadata": {
            "type": "object",
            "description": "Group metadata."
          },
          "poolIDs": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Identifiers of the associated pools."
          },
          "created": {
            "type": "string",
            "format": "rfc3339",
            "description": "Group creation date."
          },
          "updated": {
            "type": "string",
            "format": "rfc3339",
            "description": "Group update date."
          }
        },
        "required": [
          "id",
          "tenantID",
          "name",
          "displayName",
          "path",
          "irn",
          "created",
          "updated"
        ]
      },
      "GroupsResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GroupResponse"
            }
          },
          "count": {
            "type": "integer",
            "description": "Total number of groups."
          },
          "page": {
            "type": "integer",
            "description": "Page number."
          },
          "pageSize": {
            "type": "integer",
            "description": "Page size."
          }
        },
        "required": [
          "count",
          "page",
          "pageSize"
        ]
      },
      "GroupIDs": {
        "type": "object",
        "properties": {
          "groupIDs": {
            "type": "string",
            "description": "Group IDs."
          }
        },
        "required": [
          "groupIDs"
        ]
      },
      "IdentityPolicyStatement": {
        "type": "object",
        "properties": {
          "actions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Actions."
          },
          "resources": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Resources."
          },
          "description": {
            "type": "string",
            "description": "Description."
          },
          "effect": {
            "type": "object",
            "description": "Effect.",
            "enum": [
              "allow",
              "deny"
            ]
          }
        },
        "required": [
          "actions",
          "resources",
          "effect"
        ]
      },
      "IdentityPolicy": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Policy ID."
          },
          "irn": {
            "type": "string",
            "description": "Policy IRN.",
            "pattern": "^[a-zA-Z0-9_\\-/:*@.]*$"
          },
          "name": {
            "type": "string",
            "description": "Policy name.",
            "pattern": "^[a-zA-Z0-9_\\-]*$"
          },
          "description": {
            "type": "string",
            "description": "Policy description."
          },
          "type": {
            "type": "object",
            "description": "Policy type.",
            "enum": [
              "identity"
            ]
          },
          "origin": {
            "type": "object",
            "description": "Policy origin.",
            "enum": [
              "api",
              "config"
            ]
          },
          "version": {
            "type": "string",
            "description": "Policy version."
          },
          "statements": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/IdentityPolicyStatement"
            },
            "description": "Policy statements."
          },
          "poolIDs": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Identifiers of the associated pools."
          }
        },
        "required": [
          "id",
          "irn",
          "name",
          "description",
          "type",
          "origin",
          "version",
          "statements"
        ]
      },
      "IdentityPoliciesResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/IdentityPolicy"
            },
            "description": "Policy list."
          },
          "count": {
            "type": "integer",
            "description": "Total number of resources."
          },
          "page": {
            "type": "integer",
            "description": "Page number."
          },
          "pageSize": {
            "type": "integer",
            "description": "Page size."
          }
        },
        "required": [
          "data",
          "count",
          "page",
          "pageSize"
        ]
      },
      "PolicyIDs": {
        "type": "object",
        "properties": {
          "policyIDs": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Policy IDs."
          }
        },
        "required": [
          "policyIDs"
        ]
      },
      "ResourcePolicyStatement": {
        "type": "object",
        "properties": {
          "actions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Actions."
          },
          "principals": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Principals."
          },
          "description": {
            "type": "string",
            "description": "Description."
          },
          "effect": {
            "type": "object",
            "description": "Effect.",
            "enum": [
              "allow",
              "deny"
            ]
          }
        },
        "required": [
          "actions",
          "principals",
          "effect"
        ]
      },
      "ResourcePolicy": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Policy ID."
          },
          "irn": {
            "type": "string",
            "description": "Policy IRN.",
            "pattern": "^[a-zA-Z0-9_\\-/:*@.]*$"
          },
          "name": {
            "type": "string",
            "description": "Policy name.",
            "pattern": "^[a-zA-Z0-9_\\-]*$"
          },
          "description": {
            "type": "string",
            "description": "Policy description."
          },
          "type": {
            "type": "object",
            "description": "Policy type.",
            "enum": [
              "resource"
            ]
          },
          "origin": {
            "type": "object",
            "description": "Policy origin.",
            "enum": [
              "api",
              "config"
            ]
          },
          "version": {
            "type": "string",
            "description": "Policy version."
          },
          "statements": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ResourcePolicyStatement"
            },
            "description": "Policy statements."
          },
          "poolIDs": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Identifiers of the associated pools."
          }
        },
        "required": [
          "id",
          "irn",
          "name",
          "description",
          "type",
          "origin",
          "version",
          "statements"
        ]
      },
      "ResourcePolicyResponse": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/ResourcePolicy"
          }
        },
        "required": [
          "data"
        ]
      },
      "ResourcePolicyUpdateStatement": {
        "type": "object",
        "properties": {
          "description": {
            "type": "string",
            "description": "Description."
          },
          "actions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Actions."
          },
          "principals": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Principals."
          },
          "effect": {
            "type": "object",
            "description": "Effect.",
            "enum": [
              "allow",
              "deny"
            ]
          }
        },
        "required": [
          "actions",
          "principals",
          "effect"
        ]
      },
      "ResourcePolicyUpdateRequest": {
        "type": "object",
        "properties": {
          "description": {
            "type": "string",
            "description": "Policy description."
          },
          "statements": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ResourcePolicyUpdateStatement"
            },
            "description": "List of statements."
          }
        },
        "required": [
          "description",
          "statements"
        ]
      },
      "GroupCreationRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Group name.",
            "pattern": "^[a-zA-Z0-9_\\-@.]*$"
          },
          "displayName": {
            "type": "string",
            "description": "Group display name."
          },
          "parentID": {
            "type": "string",
            "description": "Parent group ID."
          },
          "tenantID": {
            "type": "string",
            "description": "Tenant ID to create the group in."
          },
          "poolIDs": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Pool IDs the user will be attached to."
          }
        },
        "required": [
          "name"
        ]
      },
      "GroupsBulkDeleteRequest": {
        "type": "object",
        "properties": {
          "groupIDs": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "groupIDs"
        ]
      },
      "GroupUpdateRequest": {
        "type": "object",
        "properties": {
          "displayName": {
            "type": "string",
            "description": "Display name."
          },
          "poolIDs": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Identifiers of the associated pools."
          }
        },
        "required": [
          "displayName"
        ]
      },
      "GroupAddMembersRequest": {
        "type": "object",
        "properties": {
          "userIDs": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "User IDs to be added to the group."
          }
        },
        "required": [
          "userIDs"
        ]
      },
      "GroupRemoveMembersRequest": {
        "type": "object",
        "properties": {
          "userIDs": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "User IDs to be removed from the group."
          }
        },
        "required": [
          "userIDs"
        ]
      },
      "ResourceCreationRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Resource name.",
            "pattern": "^[a-zA-Z0-9_\\-]*$"
          },
          "displayName": {
            "type": "string",
            "description": "Resource display name."
          },
          "application": {
            "type": "string",
            "description": "Application of the resource.",
            "pattern": "^[a-z0-9_\\-]{1,10}$"
          },
          "tenantID": {
            "type": "string",
            "description": "Tenant ID of the resource."
          },
          "path": {
            "type": "string",
            "description": "Resource path.",
            "pattern": "^/\\S*$"
          },
          "resourceType": {
            "type": "string",
            "description": "Resource type."
          },
          "enabled": {
            "type": "boolean",
            "description": "Whether the resource is enabled or not."
          },
          "description": {
            "type": "string",
            "description": "Resource description."
          },
          "metadata": {
            "type": "object",
            "description": "Resource metadata."
          },
          "poolIDs": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Pool IDs the resource will be attached to."
          }
        },
        "required": [
          "name",
          "application",
          "path",
          "resourceType"
        ]
      },
      "ResourceResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Resource ID."
          },
          "irn": {
            "type": "string",
            "description": "Resource IRN.",
            "pattern": "^[a-zA-Z0-9_\\-/:*@.]*$"
          },
          "application": {
            "type": "string",
            "description": "Application of the resource.",
            "pattern": "^[a-z0-9_\\-]{1,10}$"
          },
          "tenantID": {
            "type": "string",
            "description": "Tenant ID of the resource."
          },
          "name": {
            "type": "string",
            "description": "Resource name.",
            "pattern": "^[a-zA-Z0-9_\\-]*$"
          },
          "displayName": {
            "type": "string",
            "description": "Resource display name."
          },
          "path": {
            "type": "string",
            "description": "Resource path.",
            "pattern": "^/\\S*$"
          },
          "resourceType": {
            "type": "string",
            "description": "Resource type."
          },
          "created": {
            "type": "string",
            "format": "rfc3339",
            "description": "Resource creation date."
          },
          "updated": {
            "type": "string",
            "format": "rfc3339",
            "description": "Resource update date."
          },
          "enabled": {
            "type": "boolean",
            "description": "Whether the resource is enabled or not."
          },
          "description": {
            "type": "string",
            "description": "Resource description."
          },
          "metadata": {
            "type": "object",
            "description": "Resource metadata."
          },
          "poolIDs": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Identifiers of the associated pools."
          }
        },
        "required": [
          "id",
          "irn",
          "application",
          "tenantID",
          "name",
          "path",
          "resourceType",
          "created",
          "updated",
          "enabled"
        ]
      },
      "ResourcesResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "count": {
            "type": "integer",
            "description": "Total number of resources."
          },
          "page": {
            "type": "integer",
            "description": "Page number."
          },
          "pageSize": {
            "type": "integer",
            "description": "Page size."
          }
        },
        "required": [
          "count",
          "page",
          "pageSize"
        ]
      },
      "ResourcesBulkDeleteRequest": {
        "type": "object",
        "properties": {
          "resourceIDs": {
            "type": "string",
            "description": "Resource IDs."
          }
        },
        "required": [
          "resourceIDs"
        ]
      },
      "ResourceUpdateRequest": {
        "type": "object",
        "properties": {
          "displayName": {
            "type": "string",
            "description": "Resource display name."
          },
          "enabled": {
            "type": "boolean",
            "description": "Whether the resource is enabled or not."
          },
          "description": {
            "type": "string",
            "description": "Resource description."
          },
          "metadata": {
            "type": "object",
            "description": "Resource metadata."
          },
          "poolIDs": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Identifiers of the associated pools."
          }
        }
      },
      "PoolIDsResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Pool IDs."
          },
          "count": {
            "type": "integer",
            "description": "Total number of pools."
          },
          "page": {
            "type": "integer",
            "description": "Page number."
          },
          "pageSize": {
            "type": "integer",
            "description": "Page size."
          }
        },
        "required": [
          "data",
          "count",
          "page",
          "pageSize"
        ]
      },
      "EvaluateRequest": {
        "type": "object",
        "properties": {
          "action": {
            "type": "string",
            "description": "Action. Can't be a wildcard."
          },
          "resources": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "List of IRNs. Can't contain wildcards."
          }
        },
        "required": [
          "action",
          "resources"
        ]
      },
      "EvaluateOnResourceTypeRequest": {
        "type": "object",
        "properties": {
          "action": {
            "type": "string",
            "description": "Action. Cannot be a wildcard.",
            "pattern": "^[a-z:\\-]*$"
          },
          "resourceType": {
            "type": "string",
            "description": "Filters resources by type."
          },
          "application": {
            "type": "string",
            "description": "Application name to consider resources in."
          },
          "tenantID": {
            "type": "string",
            "description": "Filters resources by tenant."
          }
        },
        "required": [
          "action",
          "application"
        ]
      },
      "EvaluateOnResourceTypeResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Resource IRNs. Cannot contain wildcards."
          },
          "count": {
            "type": "integer",
            "description": "Total number of items."
          },
          "page": {
            "type": "integer",
            "description": "Page number."
          },
          "pageSize": {
            "type": "integer",
            "description": "Page size."
          }
        },
        "required": [
          "data",
          "count",
          "page",
          "pageSize"
        ]
      },
      "EvaluateActionsOnIRNsRequest": {
        "type": "object",
        "properties": {
          "actions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "List of actions. Cannot contain wildcards."
          },
          "irns": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "List of IRNs."
          }
        },
        "required": [
          "actions",
          "irns"
        ]
      },
      "DebugEvaluationOnResourceListRequest": {
        "type": "object",
        "properties": {
          "application": {
            "type": "string",
            "description": "Application name to consider resources in."
          },
          "principal": {
            "type": "string",
            "description": "Principal ID to run evaluation for."
          },
          "actions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Actions to evaluate on resources. Cannot contain wildcards."
          },
          "resources": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Resource IDs."
          }
        },
        "required": [
          "application",
          "principal",
          "actions",
          "resources"
        ]
      },
      "DebugEvaluationResponseActionDetailsItem": {
        "type": "object",
        "properties": {
          "action": {
            "type": "string",
            "description": "Requested action."
          },
          "decision": {
            "type": "string",
            "description": "Evaluation decision for this action."
          },
          "allowPolicies": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Policy IDs that allow requested action on this resource."
          },
          "denyPolicies": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Policy IDs that deny requested action on this resource."
          }
        },
        "required": [
          "action",
          "decision"
        ]
      },
      "DebugEvaluationResponseItem": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Resource ID."
          },
          "irn": {
            "type": "string",
            "description": "Resource IRN."
          },
          "decision": {
            "type": "object",
            "description": "Overall evaluation decision for all requested actions on this resource.\nIf at least one action is denied, the overall decision is denied too.\nAll actions must be allowed for the overall decision to be allowed.\n",
            "enum": [
              "allow",
              "deny"
            ]
          },
          "actions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DebugEvaluationResponseActionDetailsItem"
            },
            "description": "Detailed information on evaluation decision per each requested action."
          }
        },
        "required": [
          "id",
          "irn",
          "decision",
          "actions"
        ]
      },
      "DebugEvaluationOnResourceListResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DebugEvaluationResponseItem"
            }
          },
          "evaluationTimeMillis": {
            "type": "integer",
            "description": "Evaluation time in milliseconds."
          }
        },
        "required": [
          "evaluationTimeMillis"
        ]
      },
      "DebugEvaluationOnResourceTypeRequest": {
        "type": "object",
        "properties": {
          "tenantID": {
            "type": "string",
            "description": "Tenant ID to consider resources in.\nIf not specified, currently authenticated principal's tenant is used.\n"
          },
          "application": {
            "type": "string",
            "description": "Application name to consider resources in."
          },
          "principal": {
            "type": "string",
            "description": "Principal ID to run evaluation for."
          },
          "actions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Actions to evaluate on resources. Cannot contain wildcards."
          },
          "resourceType": {
            "type": "string",
            "description": "Resource type to run evaluation on."
          }
        },
        "required": [
          "application",
          "principal",
          "actions",
          "resourceType"
        ]
      },
      "DebugEvaluationOnResourceTypeResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "evaluationTimeMillis": {
            "type": "integer",
            "description": "Evaluation time in milliseconds."
          },
          "count": {
            "type": "integer",
            "description": "Total number of evaluated resources."
          },
          "page": {
            "type": "integer",
            "description": "Page number."
          },
          "pageSize": {
            "type": "integer",
            "description": "Total returned elements."
          }
        },
        "required": [
          "evaluationTimeMillis",
          "count",
          "page",
          "pageSize"
        ]
      },
      "PolicyCreationRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Policy name.",
            "pattern": "^[a-zA-Z0-9_\\-]*$"
          },
          "level": {
            "type": "object",
            "description": "Policy level type.",
            "enum": [
              "account",
              "tenant"
            ]
          },
          "description": {
            "type": "string",
            "description": "Policy description."
          },
          "statements": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Policy statements."
          },
          "poolIDs": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Pool IDs the policy will be attached to."
          }
        },
        "required": [
          "name",
          "level",
          "statements"
        ]
      },
      "IdentityPolicyResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "description": "Policy."
          }
        },
        "required": [
          "data"
        ]
      },
      "PolicyUpdateRequest": {
        "type": "object",
        "properties": {
          "description": {
            "type": "string",
            "description": "Policy description."
          },
          "statements": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Policy statements."
          },
          "poolIDs": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Identifiers of the associated pools."
          }
        },
        "required": [
          "description",
          "statements"
        ]
      },
      "PrincipalIRNsResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Principal IRNs."
          }
        },
        "required": [
          "data"
        ]
      },
      "TenantResponse": {
        "type": "object",
        "properties": {
          "resourceID": {
            "type": "string",
            "description": "Resource ID."
          },
          "irn": {
            "type": "string",
            "description": "Tenant IRN.",
            "pattern": "^[a-zA-Z0-9_\\-/:*@.]*$"
          },
          "tenantID": {
            "type": "string",
            "description": "Tenant ID."
          },
          "name": {
            "type": "string",
            "description": "Tenant name.",
            "pattern": "^[a-zA-Z0-9_\\-@.]*$"
          },
          "displayName": {
            "type": "string",
            "description": "Tenant display name."
          },
          "userMetadataUiSchema": {
            "type": "object",
            "description": "User metadata UI schema."
          },
          "groupMetadataUiSchema": {
            "type": "object",
            "description": "Group metadata UI schema."
          },
          "loginTheme": {
            "type": "string",
            "description": "Tenant login theme."
          },
          "created": {
            "type": "string",
            "format": "rfc3339",
            "description": "Tenant creation date in ISO 8601 format (UTC timezone)."
          },
          "updated": {
            "type": "string",
            "format": "rfc3339",
            "description": "Tenant last update date in ISO 8601 format (UTC timezone)."
          }
        },
        "required": [
          "resourceID",
          "irn",
          "tenantID",
          "name",
          "displayName",
          "loginTheme",
          "updated"
        ]
      },
      "TenantsResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TenantResponse"
            }
          },
          "count": {
            "type": "integer",
            "description": "Total number of tenants."
          },
          "page": {
            "type": "integer",
            "description": "Page number."
          },
          "pageSize": {
            "type": "integer",
            "description": "Page size."
          }
        },
        "required": [
          "count",
          "page",
          "pageSize"
        ]
      },
      "IssuerResponse": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Issuer name.",
            "pattern": "^[a-zA-Z0-9_\\-@.]*$"
          },
          "type": {
            "type": "object",
            "description": "Issuer type.",
            "enum": [
              "iamcore"
            ]
          },
          "url": {
            "type": "string",
            "description": "Issuer token URL."
          },
          "loginURL": {
            "type": "string",
            "description": "Issuer login URL."
          },
          "clientID": {
            "type": "string",
            "description": "Issuer client ID."
          }
        },
        "required": [
          "name",
          "type",
          "url",
          "loginURL",
          "clientID"
        ]
      },
      "IssuersResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/IssuerResponse"
            }
          }
        }
      },
      "TenantCreationWithIamcoreIssuerTypeRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Tenant name.",
            "pattern": "^[a-zA-Z0-9_\\-@.]*$"
          },
          "displayName": {
            "type": "string",
            "description": "Tenant display name."
          },
          "userMetadataUiSchema": {
            "type": "object",
            "description": "User metadata UI schema."
          },
          "groupMetadataUiSchema": {
            "type": "object",
            "description": "Group metadata UI schema."
          },
          "loginTheme": {
            "type": "string",
            "description": "Tenant login theme. Default is `iamcore`"
          }
        },
        "required": [
          "name",
          "displayName"
        ]
      },
      "TenantResponseData": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object"
          }
        }
      },
      "TenantUpdateRequest": {
        "type": "object",
        "properties": {
          "displayName": {
            "type": "string",
            "description": "Tenant display name."
          },
          "userMetadataUiSchema": {
            "type": "object",
            "description": "User metadata UI schema."
          },
          "groupMetadataUiSchema": {
            "type": "object",
            "description": "Group metadata UI schema."
          }
        },
        "required": [
          "displayName"
        ]
      },
      "IssuerCreateRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Issuer name.",
            "pattern": "^[a-zA-Z0-9_\\-@.]*$"
          }
        },
        "required": [
          "name"
        ]
      },
      "IamcoreIssuerSettingsResponseData": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object"
          }
        }
      },
      "IamcoreIssuerSettingsUpdateRequest": {
        "type": "object",
        "properties": {
          "redirectURIs": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The list of URIs allowed for redirect to accept authorization code"
          }
        },
        "required": [
          "redirectURIs"
        ]
      },
      "EmailTemplateItem": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "description": "Type of the email template."
          },
          "subject": {
            "type": "string",
            "description": "Subject line of the email."
          },
          "template": {
            "type": "string",
            "description": "HTML content of the email."
          }
        },
        "required": [
          "type"
        ]
      },
      "EmailTemplatesResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EmailTemplateItem"
            }
          }
        },
        "required": [
          "data"
        ]
      },
      "EmailTemplateRequest": {
        "type": "object",
        "properties": {
          "subject": {
            "type": "string",
            "description": "Subject line of the email. If not provided, the default subject will be used.\n"
          },
          "template": {
            "type": "string",
            "description": "HTML content of the email. If not provided, the default template will be used.\nCan contain placeholders.\n"
          }
        }
      },
      "EmailTemplateResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object"
          }
        },
        "required": [
          "data"
        ]
      },
      "AccountCreationRequest": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "description": "Account owner's email.",
            "pattern": "^[a-z0-9]+[\\._]?[a-z0-9]+[@][a-z]+[.][a-z]{2,3}$"
          },
          "password": {
            "type": "string",
            "description": "Account owner's password. It must be of 8-15 characters and contain:\n- at least one number\n- an uppercase letter\n- a special character\n"
          },
          "confirmPassword": {
            "type": "string",
            "description": "Confirmation of account owner's password"
          }
        },
        "required": [
          "email",
          "password",
          "confirmPassword"
        ]
      },
      "AccountProfileResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object"
          }
        }
      },
      "AccountProfileUpdateRequest": {
        "type": "object",
        "properties": {
          "accountType": {
            "type": "object",
            "description": "Account type.",
            "enum": [
              "personal",
              "company"
            ]
          },
          "firstName": {
            "type": "string",
            "description": "First name."
          },
          "lastName": {
            "type": "string",
            "description": "Last name."
          },
          "companyName": {
            "type": "string",
            "description": "Company name."
          },
          "jobCategory": {
            "type": "string",
            "description": "Job category."
          },
          "industry": {
            "type": "string",
            "description": "Industry."
          },
          "country": {
            "type": "string",
            "description": "Country."
          }
        },
        "required": [
          "accountType"
        ]
      },
      "ApplicationCreationRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Application name.",
            "pattern": "^[a-z0-9_\\-]{1,10}$"
          },
          "displayName": {
            "type": "string",
            "description": "Application display name."
          }
        },
        "required": [
          "name"
        ]
      },
      "ApplicationResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Application ID."
          },
          "irn": {
            "type": "string",
            "description": "Application IRN.",
            "pattern": "^[a-zA-Z0-9_\\-/:*@.]*$"
          },
          "name": {
            "type": "string",
            "description": "Application name.",
            "pattern": "^[a-z0-9_\\-]{1,10}$"
          },
          "displayName": {
            "type": "string",
            "description": "Application display name."
          },
          "created": {
            "type": "string",
            "format": "rfc3339",
            "description": "Application creation date in ISO 8601 format (UTC timezone)."
          },
          "updated": {
            "type": "string",
            "format": "rfc3339",
            "description": "Application last update date in ISO 8601 format (UTC timezone)."
          }
        },
        "required": [
          "id",
          "irn",
          "name",
          "created",
          "updated"
        ]
      },
      "ApplicationsResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApplicationResponse"
            }
          },
          "count": {
            "type": "integer",
            "description": "Total number of applications."
          },
          "page": {
            "type": "integer",
            "description": "Page number."
          },
          "pageSize": {
            "type": "integer",
            "description": "Page size."
          }
        },
        "required": [
          "count",
          "page",
          "pageSize"
        ]
      },
      "ApplicationResponseData": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object"
          }
        }
      },
      "ApplicationUpdateRequest": {
        "type": "object",
        "properties": {
          "displayName": {
            "type": "string",
            "description": "Application display name."
          }
        },
        "required": [
          "displayName"
        ]
      },
      "ResourceTypeCreationRequest": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "description": "Resource type.",
            "pattern": "^[a-z\\-]{1,10}$"
          },
          "description": {
            "type": "string",
            "description": "Description."
          },
          "actionPrefix": {
            "type": "string",
            "description": "Applicable prefix of action to resources of that type.\nOne to three tokens allowed in an action prefix separated by delimiters.\nFor example, if the action prefix is `myapp:document` and the operation is `sign`, then the resulting action is `myapp:document:sign`.\nIf not specified, then type of resource is used.\n",
            "pattern": "^[a-z\\-:]{1,10}$"
          },
          "operations": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Applicable operations of actions to resources of that type.\nFor example, if the operation is `sign` and the action prefix is `myapp:document`, then the resulting action is `myapp:document:sign`.\n"
          }
        },
        "required": [
          "type"
        ]
      },
      "ResourceTypesResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Resource types."
          }
        },
        "required": [
          "data"
        ]
      },
      "ResourceTypeResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Resource type ID."
          },
          "irn": {
            "type": "string",
            "description": "Resource type IRN.",
            "pattern": "^[a-zA-Z0-9_\\-/:*@.]*$"
          },
          "type": {
            "type": "string",
            "description": "Resource type."
          },
          "description": {
            "type": "string",
            "description": "Description."
          },
          "actionPrefix": {
            "type": "string",
            "description": "Applicable prefix of action to resources of that type.\nOne to three tokens allowed in an action prefix separated by delimiters.\nFor example, if the action prefix is `myapp:document` and the operation is `sign`, then the resulting action is `myapp:document:sign`.\n"
          },
          "operations": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Applicable operations of actions to resources of that type.\nFor example, if the operation is `sign` and the action prefix is `myapp:document`, then the resulting action is `myapp:document:sign`.\n"
          },
          "created": {
            "type": "string",
            "format": "rfc3339",
            "description": "Resource type creation date in ISO 8601 format (UTC timezone)."
          },
          "updated": {
            "type": "string",
            "format": "rfc3339",
            "description": "Resource type last update date in ISO 8601 format (UTC timezone)."
          }
        },
        "required": [
          "id",
          "irn",
          "type",
          "actionPrefix",
          "created",
          "updated"
        ]
      },
      "ResourceTypeResponseData": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/ResourceTypeResponse"
          }
        }
      },
      "ResourceTypeUpdateRequest": {
        "type": "object",
        "properties": {
          "description": {
            "type": "string",
            "description": "Description."
          },
          "actionPrefix": {
            "type": "string",
            "description": "Applicable prefix of action to resources of that type.\nOne to three tokens allowed in an action prefix separated by delimiters.\nFor example, if the action prefix is `myapp:document` and the operation is `sign`, then the resulting action is `myapp:document:sign`.\n"
          },
          "operations": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Applicable operations of actions to resources of that type.\nFor example, if the operation is `sign` and the action prefix is `myapp:document`, then the resulting action is `myapp:document:sign`.\n"
          }
        },
        "required": [
          "actionPrefix"
        ]
      },
      "PoolCreationRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Pool name.",
            "pattern": "^[a-zA-Z0-9_\\-@.+]*$"
          },
          "tenantID": {
            "type": "string",
            "description": "Tenant ID that pool belongs to."
          },
          "parentID": {
            "type": "string",
            "description": "Parent pool ID."
          },
          "resourceIDs": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Resource IDs to be attached to the pool."
          }
        },
        "required": [
          "name"
        ]
      },
      "PoolResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Pool ID."
          },
          "irn": {
            "type": "string",
            "description": "Pool IRN.",
            "pattern": "^[a-zA-Z0-9_\\-@.+]*$"
          },
          "name": {
            "type": "string",
            "description": "Pool name.",
            "pattern": "^[a-z0-9_\\-]{1,10}$"
          },
          "resourceIDs": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Resource IDs attached to the pool."
          }
        },
        "required": [
          "id",
          "irn",
          "name"
        ]
      },
      "PoolsResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "count": {
            "type": "integer",
            "description": "Total number of applications."
          },
          "page": {
            "type": "integer",
            "description": "Page number."
          },
          "pageSize": {
            "type": "integer",
            "description": "Page size."
          }
        },
        "required": [
          "count",
          "page",
          "pageSize"
        ]
      },
      "PoolIDsRequest": {
        "type": "object",
        "properties": {
          "poolIDs": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Pool IDs."
          }
        },
        "required": [
          "poolIDs"
        ]
      },
      "ResourceIDsRequest": {
        "type": "object",
        "properties": {
          "resourceIDs": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Resource IDs to be attached to the pool."
          }
        },
        "required": [
          "resourceIDs"
        ]
      },
      "ApiKeyResponse": {
        "type": "object",
        "properties": {
          "apiKey": {
            "type": "string",
            "description": "API key used by the principal (e.g., application, tenant, user) to communicate with iamcore for managing protected resources.\nMust be passed in the `X-iamcore-API-Key` HTTP header.\n",
            "pattern": "^[a-zA-Z0-9]{64}$"
          },
          "state": {
            "type": "string",
            "description": "API key state.\n<p>\n<ul>\n  <li>`active` - token is elligable for usage</li>\n  <li>`suspended` - suspended (frozen) token</li>\n  <li>`revoked` - revoked token</li>\n</ul>\n",
            "enum": [
              "active",
              "suspended",
              "revoked"
            ]
          },
          "lastUsed": {
            "type": "string",
            "format": "rfc3339",
            "description": "API key last used date in ISO 8601 format (UTC timezone)."
          },
          "created": {
            "type": "string",
            "format": "rfc3339",
            "description": "API key creation date in ISO 8601 format (UTC timezone)."
          },
          "updated": {
            "type": "string",
            "format": "rfc3339",
            "description": "API key last update date in ISO 8601 format (UTC timezone)."
          }
        },
        "required": [
          "apiKey",
          "state",
          "created",
          "updated"
        ]
      },
      "ApiKeysResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApiKeyResponse"
            }
          },
          "count": {
            "type": "integer",
            "description": "Total number of principal's API keys."
          },
          "page": {
            "type": "integer",
            "description": "Page number."
          },
          "pageSize": {
            "type": "integer",
            "description": "Page size."
          }
        },
        "required": [
          "count",
          "page",
          "pageSize"
        ]
      },
      "ApiKeyResponseData": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object"
          }
        }
      },
      "ApiKeyUpdateRequest": {
        "type": "object",
        "properties": {
          "state": {
            "type": "string",
            "description": "The new state of the principal's API key.\nAllowed state transitions are:\n<ul>\n  <li>`active` &rarr; `suspended`</li>\n  <li>`suspended` &rarr; `active`</li>\n  <li>any state &rarr; `revoked`</li>\n</ul>\n",
            "enum": [
              "active",
              "suspended",
              "revoked"
            ]
          }
        },
        "required": [
          "state"
        ]
      },
      "EvaluateActionsOnIRNsResponse": {
        "type": "object"
      },
      "MetadataUpdateRequest": {}
    }
  }
}