Certifyos Permission API

APIs for managing permissions

Business capability
Identity & Access Management BC-620.20

Operations 5

GET /permissions List all permissions for a tenant #
POST /permissions Create a new permission definition #
PUT /permissions/{id} Fully replace a permission's fields #
GET /permissions/{id} Retrieve a single permission by its ID #
DELETE /permissions/{id} Delete a permission definition by ID #

Work with this as data

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

MCP server

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

https://apis.io/mcp

Tools for apis

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

Call it yourself

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

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

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

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

OpenAPI Specification

certifyos-permission-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: API for Certify application
  title: Certify API Layer Permission API
  version: 1.0.0
servers:
- url: http://localhost:9000
  description: Local Development Server
- url: https://api-service.staging.certifyos.com
  description: Staging Server
- url: https://api-service.internal.certifyos.com
  description: Internal Server
- url: https://api-service.test.certifyos.com
  description: Test Server
- url: https://api-service.demo.certifyos.com
  description: Demo Server
- url: https://api-service.certifyos.com
  description: Production Server
tags:
- name: Permission
  description: APIs for managing permissions
paths:
  /permissions:
    get:
      summary: List all permissions for a tenant
      description: 'Returns a paginated list of all permission records scoped to the tenant identified by the tenant-id header. Use this endpoint to inspect the full permission catalog before assigning permissions to roles; for a single known permission, use GET /permissions/{id} instead.


        Preconditions: the caller must be authenticated and hold the READ_PERMISSION permission for the tenant.


        Pagination is offset-based: supply page (0-based, defaults to 0) and size (defaults to 100). The response contains data (the permission objects for this page), totalCount, hasNext, and hasPrevious. Note: the createdAt and updatedAt fields on each permission are always null in the current implementation, and the envelope''s page/size fields are not populated by this endpoint.'
      operationId: getAllPermissions
      tags:
      - Permission
      parameters:
      - description: Zero-based page number for offset pagination. Defaults to 0 when omitted. Maximum value is not documented.
        name: page
        in: query
        schema:
          type: integer
          format: int32
          default: '0'
      - description: Number of permission records to return per page. Defaults to 100 when omitted. Maximum value is not documented.
        name: size
        in: query
        schema:
          type: integer
          format: int32
          default: '100'
      - description: Tenant identifier that scopes the request to a specific tenant's permission catalog.
        required: true
        name: tenant-id
        in: header
        schema:
          type: string
      responses:
        '200':
          description: The requested page of permission records for this tenant, wrapped in a pagination envelope (data, totalCount, hasNext, hasPrevious). The createdAt and updatedAt fields on each permission are always null in the current implementation.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PermissionListResponseDto'
        '401':
          description: The request lacks a valid, non-expired JSON Web Token. Obtain a new token via the authentication endpoint and retry with it in the Authorization header.
          content:
            application/json: {}
        '500':
          description: An unexpected error occurred while retrieving permissions, typically a downstream data-service failure. The response body is empty; retry the request or contact support if the error persists.
          content:
            application/json: {}
      security:
      - jwt: []
    post:
      summary: Create a new permission definition
      description: 'Creates a new permission entry in the tenant''s permission catalog. Use this during initial RBAC setup or when introducing a new resource/action pair that roles can then be granted; it is typically called by administrators configuring access control, not by end-user workflows.


        Preconditions: the caller must be authenticated and hold the CREATE_PERMISSION permission for the tenant.


        Supply a request body with resource, action, and optionally description.


        On success, returns the created permission including its server-assigned id. Note: createdAt and updatedAt are always null in the current implementation.'
      operationId: createPermission
      tags:
      - Permission
      parameters:
      - description: Tenant identifier that scopes the created permission to a specific tenant's permission catalog.
        required: true
        name: tenant-id
        in: header
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PermissionCreateRequest'
        required: true
      responses:
        '201':
          description: 'The newly created permission, including its server-assigned id. Note: createdAt and updatedAt are always null in the current implementation.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PermissionResponseDto'
        '400':
          description: Returned when the downstream data service rejects the request body as invalid (for example, a missing resource or action). This endpoint performs no local bean-validation, so the exact trigger is determined by the permissions data service.
          content:
            application/json: {}
        '500':
          description: An unexpected error occurred while creating the permission, typically a downstream data-service failure. Retry the request or contact support if the error persists.
          content:
            application/json: {}
      security:
      - jwt: []
  /permissions/{id}:
    put:
      summary: Fully replace a permission's fields
      description: 'Performs a full replacement of the permission identified by {id}. Resource and action are required on every call, and description is fully replaced by the value supplied in the request body -- omitting description clears it. This is a full-replace operation, not a partial patch; use it only when you intend to set every field explicitly, since there is no separate partial-update endpoint for permissions.


        Preconditions: the caller must be authenticated and hold the UPDATE_PERMISSION permission for the tenant, and the permission identified by {id} must already exist (create it first with POST /permissions).


        On success, returns the updated permission; createdAt and updatedAt are always null in the current implementation. Returns 404 when {id} does not exist.'
      operationId: updatePermission
      tags:
      - Permission
      parameters:
      - description: Server-assigned identifier of the permission to replace. Treat as an opaque string; pass back exactly the id value returned by GET /permissions or POST /permissions.
        name: id
        in: path
        required: true
        schema:
          type: string
      - description: Tenant identifier that scopes the operation to a specific tenant's permission catalog.
        required: true
        name: tenant-id
        in: header
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PermissionUpdateRequest'
        required: true
      responses:
        '200':
          description: 'The permission after the full replacement, reflecting the resource, action, and description values supplied in the request body. Note: createdAt and updatedAt are always null in the current implementation.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PermissionResponseDto'
        '400':
          description: Returned when the downstream data service rejects the request body as invalid (for example, a missing resource or action). This endpoint performs no local bean-validation, so the exact trigger is determined by the permissions data service.
          content:
            application/json: {}
        '404':
          description: No permission with the given id exists in this tenant's catalog. Create it first with POST /permissions, or verify the id and tenant-id header.
          content:
            application/json: {}
        '500':
          description: An unexpected error occurred while replacing the permission, typically a downstream data-service failure. Retry the request or contact support if the error persists.
          content:
            application/json: {}
      security:
      - jwt: []
    get:
      summary: Retrieve a single permission by its ID
      description: 'Returns the permission record identified by {id}. Use this when you already have a specific permission id (obtained from POST /permissions or GET /permissions) and need its full details; for browsing the full catalog, use GET /permissions instead.


        Preconditions: the caller must be authenticated and hold the READ_PERMISSION permission for the tenant.


        On success, returns the matching permission (id, resource, action, description); createdAt and updatedAt are always null in the current implementation. Returns 404 when no permission with that id exists for the tenant.'
      operationId: getPermissionById
      tags:
      - Permission
      parameters:
      - description: Server-assigned identifier of the permission to retrieve. Treat as an opaque string; pass back exactly the id value returned by GET /permissions or POST /permissions.
        name: id
        in: path
        required: true
        schema:
          type: string
      - description: Tenant identifier that scopes the lookup to a specific tenant's permission catalog.
        required: true
        name: tenant-id
        in: header
        schema:
          type: string
      responses:
        '200':
          description: 'The permission matching the given id, including its resource, action, and description. Note: createdAt and updatedAt are always null in the current implementation.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PermissionResponseDto'
        '400':
          description: Returned when the request is malformed, such as an invalid id format.
          content:
            application/json: {}
        '404':
          description: No permission with the given id exists in this tenant's catalog. Verify the id value and tenant-id header, or use GET /permissions to look up a valid id.
          content:
            application/json: {}
        '500':
          description: An unexpected error occurred while retrieving the permission, typically a downstream data-service failure. Retry the request or contact support if the error persists.
          content:
            application/json: {}
      security:
      - jwt: []
    delete:
      summary: Delete a permission definition by ID
      description: 'Permanently removes the permission record identified by {id} from the tenant''s permission catalog. Use this to retire a resource/action pair that is no longer needed.


        Preconditions: the caller must be authenticated and hold the DELETE_PERMISSION permission for the tenant.


        On success, returns an empty response body. Returns 404 when no permission with that id exists for the tenant.'
      operationId: deletePermission
      tags:
      - Permission
      parameters:
      - description: Server-assigned identifier of the permission to delete. Treat as an opaque string; pass back exactly the id value returned by GET /permissions or POST /permissions.
        name: id
        in: path
        required: true
        schema:
          type: string
      - description: Tenant identifier that scopes the deletion to a specific tenant's permission catalog.
        required: true
        name: tenant-id
        in: header
        schema:
          type: string
      responses:
        '204':
          description: The permission was deleted; the response body is empty.
        '400':
          description: Returned when the request is malformed, such as an invalid id format.
          content: {}
        '404':
          description: No permission with the given id exists in this tenant's catalog. Verify the id and tenant-id header before retrying.
          content: {}
        '500':
          description: An unexpected error occurred while deleting the permission, typically a downstream data-service failure. Retry the request or contact support if the error persists.
          content: {}
      security:
      - jwt: []
components:
  schemas:
    PermissionUpdateRequest:
      type: object
      required:
      - resource
      - action
      description: Request body for updating a permission
      properties:
        resource:
          type: string
          examples:
          - user
          maxLength: 100
          description: 'Name of the resource this permission will govern (e.g., ''user'', ''roster''). At most 100 characters. Required on every call: PUT /permissions/{id} is a full replace, so this value must always be supplied.'
        action:
          type: string
          examples:
          - read
          maxLength: 100
          description: 'Name of the action this permission will grant on the resource (e.g., ''read'', ''create''). At most 100 characters. Required on every call: PUT /permissions/{id} is a full replace, so this value must always be supplied.'
        description:
          type: string
          examples:
          - Allows reading user profiles
          maxLength: 500
          description: 'Human-readable explanation of what the permission allows. At most 500 characters. Optional: since PUT /permissions/{id} is a full replace, omitting this value clears any existing description.'
    OffsetDateTime:
      type: string
      format: date-time
      examples:
      - '2022-03-10T12:15:50-04:00'
    PermissionListResponseDto:
      type: object
      description: Paginated list of permissions
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/PermissionResponseDto'
          description: Permission records included on this page. May be null (rather than an empty array) when the underlying data service returns no records — e.g. a page beyond the last available record — so consumers should treat null and [] equivalently.
        totalCount:
          type: integer
          format: int64
          description: Total number of permission records across all pages for this tenant, not just the current page.
        page:
          type: integer
          format: int32
          description: Currently always null — this endpoint does not populate a page number in the envelope.
        size:
          type: integer
          format: int32
          description: Currently always null — this endpoint does not populate a page size in the envelope.
        hasNext:
          type: boolean
          description: Whether a subsequent page of results is available, based on the presence of a next-page link from the underlying data service.
        hasPrevious:
          type: boolean
          description: Whether a preceding page of results is available, based on the presence of a previous-page link from the underlying data service.
    PermissionResponseDto:
      type: object
      description: Permission information response
      properties:
        id:
          type: string
          examples:
          - perm-123-456-789
          description: Server-assigned unique identifier for the permission.
        resource:
          type: string
          examples:
          - user
          description: Name of the resource this permission governs (e.g. 'user', 'roster'). Mirrors the resource value supplied when the permission was created or last replaced.
        action:
          type: string
          examples:
          - read
          description: Name of the action this permission grants on the resource (e.g. 'read', 'create'). Mirrors the action value supplied when the permission was created or last replaced.
        description:
          type: string
          examples:
          - Allows reading user profiles
          description: Human-readable explanation of what the permission allows. Optional; may be null if it was not supplied at creation.
        createdAt:
          $ref: '#/components/schemas/OffsetDateTime'
          type: string
          description: Timestamp the permission was created, in ISO-8601 format.
        updatedAt:
          $ref: '#/components/schemas/OffsetDateTime'
          type: string
          description: Timestamp the permission was last updated, in ISO-8601 format.
    PermissionCreateRequest:
      type: object
      required:
      - resource
      - action
      description: Request body for creating a new permission
      properties:
        resource:
          type: string
          examples:
          - user
          maxLength: 100
          pattern: \S
          description: Name of the resource this permission will govern (e.g., 'user', 'roster').
        action:
          type: string
          examples:
          - read
          maxLength: 100
          pattern: \S
          description: Name of the action this permission will grant on the resource (e.g., 'read', 'create').
        description:
          type: string
          examples:
          - Allows reading user profiles
          maxLength: 500
          description: Optional human-readable explanation of what the permission allows.
  securitySchemes:
    jwt:
      type: http
      description: JWT Authentication - Provide only the raw token without Bearer prefix
      scheme: bearer
      bearerFormat: JWT
x-provenance:
  method: harvested
  publisher: Certifyos
  source: https://api-service.internal.certifyos.com/openapi.json
  note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
    stamped by stamp-openapi-provenance.py (roadmap#793)