openapi: 3.2.0 info: title: Apiable Platform Users API description: '## Introduction The Apiable Platform API is a RESTful API that allows you to manage your portal, teams, users, and subscriptions.' contact: name: Apiable Team url: https://apiable.io email: support@apiable.io license: name: Apache 2.0 url: https://www.apache.org/licenses/LICENSE-2.0.html version: v2 servers: - url: https://developer.apiable.io tags: - name: Users description: Users are the people who use the platform. Users can be invited to join the platform by an admin or they can sign up themselves. Users can be assigned to teams and have roles and permissions within those teams. Each user has the possibility to be part of one or more teams, each with their separate roles, permissions and subscriptions. paths: /api/users/{id}/roles: put: tags: - Users summary: Update User Roles description: Update the roles of a user. The roles are used to define the permissions of the user within the platform. The roles are defined by the platform admin and can be assigned to users by the platform admin or team admins. operationId: updateUserRoles parameters: - name: id in: path description: The id of the user to be updated the team roles. required: true style: simple explode: false schema: type: string example: 6409edb91c6c14300fce1a3c - name: X-API-Version in: header description: API version to use. required: false style: simple explode: false schema: type: string enum: - '2024-09-25' requestBody: description: List of roles that need to be assigned to the user. content: application/json: schema: description: The role and permissions that a user has in a team properties: teamId: type: string accessDetails: description: Access details and role that the invited user will have properties: roleName: type: string enum: - ADMIN - READ_ONLY - RESTRICTED apiKeys: type: string enum: - NONE - READ - FULL billing: type: string enum: - NONE - READ - FULL teams: type: string enum: - NONE - READ - FULL examples: Example roles: description: User roles. value: "\n[\n {\n \"teamId\": \"66fbb93c4220cc7d307a5b0a\",\n \"accessDetails\": {\n \"roleName\": \"CUSTOM\"\n \"apiKeys\": \"FULL\",\n \"billing\": \"READ\",\n \"teams\": \"NONE\"\n }\n }\n]\n" required: true responses: '200': description: The user object with the updated fields. The change of the roles will be reflected by the field 'roles' in user.metadata object. content: application/json: schema: description: User object properties: version: type: integer format: int32 created: type: string format: date-time updated: type: string format: date-time id: type: string providerId: type: string description: The provider id of the user metadata: description: The metadata of the user properties: activeTeam: description: Unique identifier to an object properties: id: type: string agreesToReceiveEmail: type: boolean description: Flag to indicate if the user has given consent to receive emails postRegistrationWizardComplete: type: boolean description: Flag to indicate if the user has completed the registration wizard approval: type: string description: Flag to indicate if the user has been approved, if approval process is in place enum: - PENDING - ACTIVE - REJECTED teams: type: array description: List of teams that the user is part of items: description: Unique identifier to an object properties: id: type: string stripeCustomerId: type: string description: The monetization integration ID of the user registrationEmailSent: type: boolean description: Flag to indicate if the user has been sent a registration email teamRoles: type: array description: List of roles that the user has in the teams that they are part of. items: description: The role and permissions that a user has in a team properties: teamId: type: string accessDetails: description: Access details and role that the invited user will have properties: roleName: type: string enum: - ADMIN - READ_ONLY - RESTRICTED apiKeys: type: string enum: - NONE - READ - FULL billing: type: string enum: - NONE - READ - FULL teams: type: string enum: - NONE - READ - FULL registrationCustomProperties: type: object additionalProperties: type: string description: Registration custom properties description: Registration custom properties developer: type: boolean givenName: type: string description: The first or given name of the user familyName: type: string description: The last or family name of the user email: type: string description: The email of the user name: type: string description: The full name of the user, read only, constructed from the given and family name active: type: boolean description: Flag to indicate if the user is active company: type: string description: Name of the company the user is part of, by default it is the domain of the email examples: Example user: description: User object with updated roles. value: id: 6409edb91c6c14300fce1a3c created: '2023-03-09T16:31:21.829' updated: '2023-09-25T14:45:54.602' providerId: VVNFUjpkMTllMjE3ZS02NDI0LTExZWQtOTMwOS0wNjZmNDNjODhjYjI= metadata: activeTeam: id: 6409edb91c6c14300fce1a3a isDeveloper: false agreesToReceiveEmail: false postRegistrationWizardComplete: true approval: ACTIVE registrationEmailSent: true teamRoles: - teamId: 6409edb91c6c14300fce1a3a accessDetails: roleName: ADMIN apiKeys: FULL billing: FULL teams: FULL givenName: Alice familyName: Piable email: alice.piable@apiable.io name: Alice Piable active: true company: Apiable version: 32 '400': description: 'Bad Request: Invalid roles or operation.' content: application/json: schema: type: string examples: BadRequest: description: Error message when the roles update is not allowed for the user. value: Invalid roles update '401': description: 'Unauthorized for operation: updateUserRoles' content: application/json: schema: type: object properties: message: type: string example: Unauthorized status: type: string example: '401' '404': description: 'Not Found: The user to update roles does not exist.' content: application/json: schema: type: string examples: NotFound: description: Error message when the user to be updated is not found. value: User not found security: - oauth-cc: - apiable/platform /api/users/{id}/reject: post: tags: - Users summary: Reject User description: Rejects a user from joining the platform when they have been invited or signed up, and approval process has been enabled on the platform. The approval process is controlled by the platform admin and must be enabled in the platform settings from the dashboard. operationId: rejectUser parameters: - name: id in: path description: The id of the user to be rejected. required: true style: simple explode: false schema: type: string example: 6409edb91c6c14300fce1a3c - name: X-API-Version in: header description: API version to use. required: false style: simple explode: false schema: type: string enum: - '2024-09-25' responses: '200': description: The user object with the updated fields. The change of the approval will be reflected by the field 'approval' in user.metadata object. content: application/json: schema: description: User object properties: version: type: integer format: int32 created: type: string format: date-time updated: type: string format: date-time id: type: string providerId: type: string description: The provider id of the user metadata: description: The metadata of the user properties: activeTeam: description: Unique identifier to an object properties: id: type: string agreesToReceiveEmail: type: boolean description: Flag to indicate if the user has given consent to receive emails postRegistrationWizardComplete: type: boolean description: Flag to indicate if the user has completed the registration wizard approval: type: string description: Flag to indicate if the user has been approved, if approval process is in place enum: - PENDING - ACTIVE - REJECTED teams: type: array description: List of teams that the user is part of items: description: Unique identifier to an object properties: id: type: string stripeCustomerId: type: string description: The monetization integration ID of the user registrationEmailSent: type: boolean description: Flag to indicate if the user has been sent a registration email teamRoles: type: array description: List of roles that the user has in the teams that they are part of. items: description: The role and permissions that a user has in a team properties: teamId: type: string accessDetails: description: Access details and role that the invited user will have properties: roleName: type: string enum: - ADMIN - READ_ONLY - RESTRICTED apiKeys: type: string enum: - NONE - READ - FULL billing: type: string enum: - NONE - READ - FULL teams: type: string enum: - NONE - READ - FULL registrationCustomProperties: type: object additionalProperties: type: string description: Registration custom properties description: Registration custom properties developer: type: boolean givenName: type: string description: The first or given name of the user familyName: type: string description: The last or family name of the user email: type: string description: The email of the user name: type: string description: The full name of the user, read only, constructed from the given and family name active: type: boolean description: Flag to indicate if the user is active company: type: string description: Name of the company the user is part of, by default it is the domain of the email examples: Example user: description: User object after rejection. value: id: 6409edb91c6c14300fce1a3c created: '2023-03-09T16:31:21.829' updated: '2023-09-25T14:45:54.602' providerId: VVNFUjpkMTllMjE3ZS02NDI0LTExZWQtOTMwOS0wNjZmNDNjODhjYjI= metadata: activeTeam: id: 6409edb91c6c14300fce1a3a isDeveloper: false agreesToReceiveEmail: false postRegistrationWizardComplete: true approval: ACTIVE registrationEmailSent: true teamRoles: - teamId: 6409edb91c6c14300fce1a3a accessDetails: roleName: ADMIN apiKeys: FULL billing: FULL teams: FULL givenName: Alice familyName: Piable email: alice.piable@apiable.io name: Alice Piable active: true company: Apiable version: 32 '401': description: 'Unauthorized for operation: rejectUser' content: application/json: schema: type: object properties: message: type: string example: Unauthorized status: type: string example: '401' '404': description: 'Not Found: The user to reject does not exist.' content: application/json: schema: type: string examples: NotFound: description: Error message when the user to be rejected is not found. value: User not found security: - oauth-cc: - apiable/platform /api/users/{id}/approve: post: tags: - Users summary: Approve User description: Approve User to join the platform when they have been invited or signed up, and approval process has been enabled on the platform. The approval process is controlled by the platform admin and must be enabled in the platform settings from the dashboard. operationId: approveUser parameters: - name: id in: path description: The id of the user to be approved. required: true style: simple explode: false schema: type: string example: 6409edb91c6c14300fce1a3c - name: X-API-Version in: header description: API version to use. required: false style: simple explode: false schema: type: string enum: - '2024-09-25' responses: '200': description: The user object with the updated fields. The change of the approval will be reflected by the field 'approval' in user.metadata object. content: application/json: schema: description: User object properties: version: type: integer format: int32 created: type: string format: date-time updated: type: string format: date-time id: type: string providerId: type: string description: The provider id of the user metadata: description: The metadata of the user properties: activeTeam: description: Unique identifier to an object properties: id: type: string agreesToReceiveEmail: type: boolean description: Flag to indicate if the user has given consent to receive emails postRegistrationWizardComplete: type: boolean description: Flag to indicate if the user has completed the registration wizard approval: type: string description: Flag to indicate if the user has been approved, if approval process is in place enum: - PENDING - ACTIVE - REJECTED teams: type: array description: List of teams that the user is part of items: description: Unique identifier to an object properties: id: type: string stripeCustomerId: type: string description: The monetization integration ID of the user registrationEmailSent: type: boolean description: Flag to indicate if the user has been sent a registration email teamRoles: type: array description: List of roles that the user has in the teams that they are part of. items: description: The role and permissions that a user has in a team properties: teamId: type: string accessDetails: description: Access details and role that the invited user will have properties: roleName: type: string enum: - ADMIN - READ_ONLY - RESTRICTED apiKeys: type: string enum: - NONE - READ - FULL billing: type: string enum: - NONE - READ - FULL teams: type: string enum: - NONE - READ - FULL registrationCustomProperties: type: object additionalProperties: type: string description: Registration custom properties description: Registration custom properties developer: type: boolean givenName: type: string description: The first or given name of the user familyName: type: string description: The last or family name of the user email: type: string description: The email of the user name: type: string description: The full name of the user, read only, constructed from the given and family name active: type: boolean description: Flag to indicate if the user is active company: type: string description: Name of the company the user is part of, by default it is the domain of the email examples: Example user: description: User object after approval. value: id: 6409edb91c6c14300fce1a3c created: '2023-03-09T16:31:21.829' updated: '2023-09-25T14:45:54.602' providerId: VVNFUjpkMTllMjE3ZS02NDI0LTExZWQtOTMwOS0wNjZmNDNjODhjYjI= metadata: activeTeam: id: 6409edb91c6c14300fce1a3a isDeveloper: false agreesToReceiveEmail: false postRegistrationWizardComplete: true approval: ACTIVE registrationEmailSent: true teamRoles: - teamId: 6409edb91c6c14300fce1a3a accessDetails: roleName: ADMIN apiKeys: FULL billing: FULL teams: FULL givenName: Alice familyName: Piable email: alice.piable@apiable.io name: Alice Piable active: true company: Apiable version: 32 '401': description: 'Unauthorized for operation: approveUser' content: application/json: schema: type: object properties: message: type: string example: Unauthorized status: type: string example: '401' '404': description: 'Not Found: The user to approve does not exist.' content: application/json: schema: type: string examples: NotFound: description: Error message when the user to be approved is not found. value: User not found security: - oauth-cc: - apiable/platform /api/users/{id}: get: tags: - Users summary: Read User description: Retrieve a user by id. The user will be returned with all its details. operationId: readUser parameters: - name: id in: path description: The id of the user to be retrieved. required: true style: simple explode: false schema: type: string example: 6409edb91c6c14300fce1a3c - name: X-API-Version in: header description: API version to use. required: false style: simple explode: false schema: type: string enum: - '2024-09-25' responses: '200': description: 'OK: Successfully retrieved the user.' content: application/json: schema: description: User object properties: version: type: integer format: int32 created: type: string format: date-time updated: type: string format: date-time id: type: string providerId: type: string description: The provider id of the user metadata: description: The metadata of the user properties: activeTeam: description: Unique identifier to an object properties: id: type: string agreesToReceiveEmail: type: boolean description: Flag to indicate if the user has given consent to receive emails postRegistrationWizardComplete: type: boolean description: Flag to indicate if the user has completed the registration wizard approval: type: string description: Flag to indicate if the user has been approved, if approval process is in place enum: - PENDING - ACTIVE - REJECTED teams: type: array description: List of teams that the user is part of items: description: Unique identifier to an object properties: id: type: string stripeCustomerId: type: string description: The monetization integration ID of the user registrationEmailSent: type: boolean description: Flag to indicate if the user has been sent a registration email teamRoles: type: array description: List of roles that the user has in the teams that they are part of. items: description: The role and permissions that a user has in a team properties: teamId: type: string accessDetails: description: Access details and role that the invited user will have properties: roleName: type: string enum: - ADMIN - READ_ONLY - RESTRICTED apiKeys: type: string enum: - NONE - READ - FULL billing: type: string enum: - NONE - READ - FULL teams: type: string enum: - NONE - READ - FULL registrationCustomProperties: type: object additionalProperties: type: string description: Registration custom properties description: Registration custom properties developer: type: boolean givenName: type: string description: The first or given name of the user familyName: type: string description: The last or family name of the user email: type: string description: The email of the user name: type: string description: The full name of the user, read only, constructed from the given and family name active: type: boolean description: Flag to indicate if the user is active company: type: string description: Name of the company the user is part of, by default it is the domain of the email examples: Example user: description: User object with all its details. value: "\n{\n \"id\": \"6268ec80a098ed05f047f278\",\n \"created\": \"2022-04-27T07:10:56.86\",\n \"updated\": \"2024-10-01T11:24:31.365\",\n \"providerId\": \"13843842-1001-707c-f74b-505ade4cf865\",\n \"metadata\": {\n \"activeTeam\": {\n \"id\": \"6268ec80a098ed05f047f279\"\n },\n \"isDeveloper\": true,\n \"agreesToReceiveEmail\": true,\n \"postRegistrationWizardComplete\": true,\n \"approval\": \"ACTIVE\",\n \"registrationEmailSent\": false,\n \"teamRoles\": [\n {\n \"teamId\": \"6268ec80a098ed05f047f279\",\n \"accessDetails\": {\n \"roleName\": \"ADMIN\",\n \"apiKeys\": \"FULL\",\n \"billing\": \"FULL\",\n \"teams\": \"FULL\"\n }\n },\n {\n \"teamId\": \"6304fac7b097dd1afb5273f3\",\n \"accessDetails\": {\n \"roleName\": \"ADMIN\",\n \"apiKeys\": \"FULL\",\n \"billing\": \"FULL\",\n \"teams\": \"FULL\"\n }\n },\n ]\n },\n \"givenName\": \"Alexander 2\",\n \"familyName\": \"Schamne\",\n \"email\": \"albert.piable@apiable.io\",\n \"name\": \"Albert Piable\",\n \"active\": true,\n \"company\": \"Apiable\",\n \"version\": 42\n}\n" '401': description: 'Unauthorized for operation: readUser' content: application/json: schema: type: object properties: message: type: string example: Unauthorized status: type: string example: '401' '404': description: 'Not Found: The requested user does not exist.' content: application/json: schema: type: string examples: NotFound: description: Error message when the user with the given ID is not found. value: User not found security: - oauth-cc: - apiable/platform patch: tags: - Users summary: Update User description: Update values of the platform user. The response of the operation will be the updated user. The updates are applied through patch logic, which means that only the fields that are included in the request will be updated. The rest of the fields will remain unchanged. operationId: updateUser parameters: - name: id in: path description: The id of the user to be updated. required: true style: simple explode: false schema: type: string example: 6409edb91c6c14300fce1a3c - name: X-API-Version in: header description: API version to use. required: false style: simple explode: false schema: type: string enum: - '2024-09-25' requestBody: description: 'Request body for operation: updateUser.' content: application/json: schema: type: array items: description: Patch object for user properties: op: type: string description: Supported patch operations enum: - replace path: type: string description: Supported patch paths for User enum: - /email - /givenName - /familyName value: type: string examples: Example patch operations: description: Patch operation to update the user. value: - op: replace path: /email value: alice.piable@apiable.io required: true responses: '200': description: 'OK: User updated successfully.' content: application/json: schema: description: User object properties: version: type: integer format: int32 created: type: string format: date-time updated: type: string format: date-time id: type: string providerId: type: string description: The provider id of the user metadata: description: The metadata of the user properties: activeTeam: description: Unique identifier to an object properties: id: type: string agreesToReceiveEmail: type: boolean description: Flag to indicate if the user has given consent to receive emails postRegistrationWizardComplete: type: boolean description: Flag to indicate if the user has completed the registration wizard approval: type: string description: Flag to indicate if the user has been approved, if approval process is in place enum: - PENDING - ACTIVE - REJECTED teams: type: array description: List of teams that the user is part of items: description: Unique identifier to an object properties: id: type: string stripeCustomerId: type: string description: The monetization integration ID of the user registrationEmailSent: type: boolean description: Flag to indicate if the user has been sent a registration email teamRoles: type: array description: List of roles that the user has in the teams that they are part of. items: description: The role and permissions that a user has in a team properties: teamId: type: string accessDetails: description: Access details and role that the invited user will have properties: roleName: type: string enum: - ADMIN - READ_ONLY - RESTRICTED apiKeys: type: string enum: - NONE - READ - FULL billing: type: string enum: - NONE - READ - FULL teams: type: string enum: - NONE - READ - FULL registrationCustomProperties: type: object additionalProperties: type: string description: Registration custom properties description: Registration custom properties developer: type: boolean givenName: type: string description: The first or given name of the user familyName: type: string description: The last or family name of the user email: type: string description: The email of the user name: type: string description: The full name of the user, read only, constructed from the given and family name active: type: boolean description: Flag to indicate if the user is active company: type: string description: Name of the company the user is part of, by default it is the domain of the email examples: Example response: description: Updated user object. value: "\n{\n \"id\": \"6268ec80a098ed05f047f278\",\n \"created\": \"2022-04-27T07:10:56.86\",\n \"updated\": \"2024-10-01T11:24:31.365\",\n \"providerId\": \"13843842-1001-707c-f74b-505ade4cf865\",\n \"metadata\": {\n \"activeTeam\": {\n \"id\": \"6268ec80a098ed05f047f279\"\n },\n \"isDeveloper\": true,\n \"agreesToReceiveEmail\": true,\n \"postRegistrationWizardComplete\": true,\n \"approval\": \"ACTIVE\",\n \"registrationEmailSent\": false,\n \"teamRoles\": [\n {\n \"teamId\": \"6268ec80a098ed05f047f279\",\n \"accessDetails\": {\n \"roleName\": \"ADMIN\",\n \"apiKeys\": \"FULL\",\n \"billing\": \"FULL\",\n \"teams\": \"FULL\"\n }\n },\n {\n \"teamId\": \"6304fac7b097dd1afb5273f3\",\n \"accessDetails\": {\n \"roleName\": \"ADMIN\",\n \"apiKeys\": \"FULL\",\n \"billing\": \"FULL\",\n \"teams\": \"FULL\"\n }\n },\n ]\n },\n \"givenName\": \"Alexander 2\",\n \"familyName\": \"Schamne\",\n \"email\": \"albert.piable@apiable.io\",\n \"name\": \"Albert Piable\",\n \"active\": true,\n \"company\": \"Apiable\",\n \"version\": 42\n}\n" '400': description: 'Bad Request: Invalid update parameters or operation.' content: application/json: schema: type: string examples: BadRequest: description: Error message when the patch operation is not allowed for the user. value: Bad Request '401': description: 'Unauthorized for operation: updateUser' content: application/json: schema: type: object properties: message: type: string example: Unauthorized status: type: string example: '401' security: - oauth-cc: - apiable/platform /api/users: get: tags: - Users summary: Read Users description: List all users on the platform that match the pagination and search criteria. operationId: findAllUsers parameters: - name: page in: query description: The page number of the users to be returned. required: false style: form explode: true schema: type: integer format: int32 example: 0 - name: size in: query description: The number of users to be returned per page. required: false style: form explode: true schema: type: integer format: int32 example: 10 - name: sort in: query description: The sorting criteria for the users. The sorting criteria is a list of fields separated by commas. required: false style: form explode: true schema: type: array items: type: string example: - name:DESC - name: search in: query description: The search criteria for the users. required: false style: form explode: true schema: type: array items: type: string example: - name.like=albert - name: X-API-Version in: header description: API version to use. required: false style: simple explode: false schema: type: string enum: - '2024-09-25' responses: '200': description: 'OK: Successfully retrieved the list of users.' content: application/json: schema: description: Response object for paginated user results properties: content: type: array items: description: User object properties: version: type: integer format: int32 created: type: string format: date-time updated: type: string format: date-time id: type: string providerId: type: string description: The provider id of the user metadata: description: The metadata of the user properties: activeTeam: description: Unique identifier to an object properties: id: type: string agreesToReceiveEmail: type: boolean description: Flag to indicate if the user has given consent to receive emails postRegistrationWizardComplete: type: boolean description: Flag to indicate if the user has completed the registration wizard approval: type: string description: Flag to indicate if the user has been approved, if approval process is in place enum: - PENDING - ACTIVE - REJECTED teams: type: array description: List of teams that the user is part of items: description: Unique identifier to an object properties: id: type: string stripeCustomerId: type: string description: The monetization integration ID of the user registrationEmailSent: type: boolean description: Flag to indicate if the user has been sent a registration email teamRoles: type: array description: List of roles that the user has in the teams that they are part of. items: description: The role and permissions that a user has in a team properties: teamId: type: string accessDetails: description: Access details and role that the invited user will have properties: roleName: type: string enum: - ADMIN - READ_ONLY - RESTRICTED apiKeys: type: string enum: - NONE - READ - FULL billing: type: string enum: - NONE - READ - FULL teams: type: string enum: - NONE - READ - FULL registrationCustomProperties: type: object additionalProperties: type: string description: Registration custom properties description: Registration custom properties developer: type: boolean givenName: type: string description: The first or given name of the user familyName: type: string description: The last or family name of the user email: type: string description: The email of the user name: type: string description: The full name of the user, read only, constructed from the given and family name active: type: boolean description: Flag to indicate if the user is active company: type: string description: Name of the company the user is part of, by default it is the domain of the email pageable: description: The PageableObject schema is used to represent pagination information for API responses. It includes details such as the current page number, size of the page, total number of pages, and total number of items available. properties: offset: type: integer format: int64 pageNumber: type: integer format: int32 pageSize: type: integer format: int32 paged: type: boolean unpaged: type: boolean sort: description: The SortObject schema is used to represent sorting information for API responses. properties: empty: type: boolean sorted: type: boolean unsorted: type: boolean last: type: boolean totalElements: type: integer format: int64 totalPages: type: integer format: int32 size: type: integer format: int32 number: type: integer format: int32 sort: description: The SortObject schema is used to represent sorting information for API responses. properties: empty: type: boolean sorted: type: boolean unsorted: type: boolean first: type: boolean numberOfElements: type: integer format: int32 empty: type: boolean examples: Example list of users: description: List of all users that exist on the portal. value: content: - id: 6409edb91c6c14300fce1a3c created: '2023-03-09T16:31:21.829' updated: '2023-09-25T14:45:54.602' providerId: VVNFUjpkMTllMjE3ZS02NDI0LTExZWQtOTMwOS0wNjZmNDNjODhjYjI= metadata: activeTeam: id: 6409edb91c6c14300fce1a3a isDeveloper: false agreesToReceiveEmail: false postRegistrationWizardComplete: true approval: ACTIVE registrationEmailSent: true teamRoles: - teamId: 6409edb91c6c14300fce1a3a accessDetails: roleName: ADMIN apiKeys: FULL billing: FULL teams: FULL givenName: Alice familyName: Piable email: alice.piable@apiable.io name: Alice Piable active: true company: Apiable version: 32 pageable: pageNumber: 0 pageSize: 10 sort: empty: false unsorted: false sorted: true offset: 0 paged: true unpaged: false last: true totalElements: 1 totalPages: 1 size: 10 number: 0 sort: empty: false unsorted: false sorted: true first: true numberOfElements: 1 empty: false '401': description: 'Unauthorized for operation: findAllUsers' content: application/json: schema: type: object properties: message: type: string example: Unauthorized status: type: string example: '401' security: - oauth-cc: - apiable/platform components: securitySchemes: oauth-cc: type: oauth2 description: 'OAuth 2.0: Client Credentials' flows: clientCredentials: tokenUrl: https://developer.apiable.io/api/oauth2/token scopes: {} x-receive-token-in: request-body x-client-id: '' x-client-secret: ''