Authzed Permissions API

Check, expand, and lookup permissions on resources and subjects

OpenAPI Specification

authzed-permissions-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Authzed SpiceDB Experimental Permissions API
  description: SpiceDB Permissions API — gRPC and HTTP/JSON interfaces for writing schemas, managing relationship tuples, and executing permission checks using a Zanzibar-inspired graph model. Supports CheckPermission, LookupResources, LookupSubjects, WriteRelationships, ReadRelationships, DeleteRelationships, WriteSchema, ReadSchema, and streaming Watch operations.
  version: '1.0'
  contact:
    name: Authzed, Inc.
    url: https://github.com/authzed/api
    email: support@authzed.com
  license:
    name: Apache 2.0 License
    url: https://github.com/authzed/api/blob/main/LICENSE
servers:
- url: https://grpc.authzed.com
  description: Authzed Cloud primary endpoint
- url: https://app.authzed.com
  description: Authzed Cloud management endpoint
security:
- BearerAuth: []
tags:
- name: Permissions
  description: Check, expand, and lookup permissions on resources and subjects
paths:
  /v1/permissions/check:
    post:
      operationId: PermissionsService_CheckPermission
      summary: 'CheckPermission determines for a given resource whether a subject computes

        to having a permission or is a direct member of a particular relation.'
      tags:
      - Permissions
      security:
      - BearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CheckPermissionRequest'
      responses:
        '200':
          description: A successful response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CheckPermissionResponse'
        default:
          description: An unexpected error response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Status'
  /v1/permissions/checkbulk:
    post:
      operationId: PermissionsService_CheckBulkPermissions
      summary: 'CheckBulkPermissions evaluates the given list of permission checks

        and returns the list of results.'
      tags:
      - Permissions
      security:
      - BearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CheckBulkPermissionsRequest'
      responses:
        '200':
          description: A successful response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CheckBulkPermissionsResponse'
        default:
          description: An unexpected error response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Status'
  /v1/permissions/expand:
    post:
      operationId: PermissionsService_ExpandPermissionTree
      summary: 'ExpandPermissionTree reveals the graph structure for a resource''s

        permission or relation. This RPC does not recurse infinitely deep and may

        require multiple calls to fully unnest a deeply nested graph.'
      tags:
      - Permissions
      security:
      - BearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExpandPermissionTreeRequest'
      responses:
        '200':
          description: A successful response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpandPermissionTreeResponse'
        default:
          description: An unexpected error response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Status'
  /v1/permissions/resources:
    post:
      operationId: PermissionsService_LookupResources
      summary: 'LookupResources returns all the resources of a given type that a subject

        can access whether via a computed permission or relation membership.'
      tags:
      - Permissions
      security:
      - BearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LookupResourcesRequest'
      responses:
        '200':
          description: A successful response.(streaming responses)
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    $ref: '#/components/schemas/LookupResourcesResponse'
                  error:
                    $ref: '#/components/schemas/Status'
                title: Stream result of LookupResourcesResponse
        default:
          description: An unexpected error response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Status'
  /v1/permissions/subjects:
    post:
      operationId: PermissionsService_LookupSubjects
      summary: 'LookupSubjects returns all the subjects of a given type that

        have access whether via a computed permission or relation membership.'
      tags:
      - Permissions
      security:
      - BearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LookupSubjectsRequest'
      responses:
        '200':
          description: A successful response.(streaming responses)
          content:
            application/json:
              schema:
                type: object
                properties:
                  result:
                    $ref: '#/components/schemas/LookupSubjectsResponse'
                  error:
                    $ref: '#/components/schemas/Status'
                title: Stream result of LookupSubjectsResponse
        default:
          description: An unexpected error response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Status'
components:
  schemas:
    SubProblems:
      type: object
      properties:
        traces:
          type: array
          items:
            type: object
            $ref: '#/components/schemas/CheckDebugTrace'
    CheckBulkPermissionsRequest:
      type: object
      properties:
        consistency:
          $ref: '#/components/schemas/Consistency'
        items:
          type: array
          items:
            type: object
            $ref: '#/components/schemas/CheckBulkPermissionsRequestItem'
        withTracing:
          type: boolean
          description: 'with_tracing, if true, indicates that each response should include a debug trace.

            This can be useful for debugging and performance analysis, but adds a small amount

            of compute overhead to the request.'
      description: 'CheckBulkPermissionsRequest issues a check on whether a subject has permission

        or is a member of a relation on a specific resource for each item in the list.


        The ordering of the items in the response is maintained in the response.

        Checks with the same subject/permission will automatically be batched for performance optimization.'
    Any:
      type: object
      properties:
        '@type':
          type: string
          description: "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n  value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n  URL, or have them precompiled into a binary to avoid any\n  lookup. Therefore, binary compatibility needs to be preserved\n  on changes to types. (Use versioned type names to manage\n  breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics."
      additionalProperties: {}
      description: "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n    Foo foo = ...;\n    Any any;\n    any.PackFrom(foo);\n    ...\n    if (any.UnpackTo(&foo)) {\n      ...\n    }\n\nExample 2: Pack and unpack a message in Java.\n\n    Foo foo = ...;\n    Any any = Any.pack(foo);\n    ...\n    if (any.is(Foo.class)) {\n      foo = any.unpack(Foo.class);\n    }\n    // or ...\n    if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n      foo = any.unpack(Foo.getDefaultInstance());\n    }\n\n Example 3: Pack and unpack a message in Python.\n\n    foo = Foo(...)\n    any = Any()\n    any.Pack(foo)\n    ...\n    if any.Is(Foo.DESCRIPTOR):\n      any.Unpack(foo)\n      ...\n\n Example 4: Pack and unpack a message in Go\n\n     foo := &pb.Foo{...}\n     any, err := anypb.New(foo)\n     if err != nil {\n       ...\n     }\n     ...\n     foo := &pb.Foo{}\n     if err := any.UnmarshalTo(foo); err != nil {\n       ...\n     }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n    package google.profile;\n    message Person {\n      string first_name = 1;\n      string last_name = 2;\n    }\n\n    {\n      \"@type\": \"type.googleapis.com/google.profile.Person\",\n      \"firstName\": <string>,\n      \"lastName\": <string>\n    }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n    {\n      \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n      \"value\": \"1.212s\"\n    }"
    LookupResourcesResponse:
      type: object
      properties:
        lookedUpAt:
          $ref: '#/components/schemas/ZedToken'
          description: looked_up_at is the ZedToken at which the resource was found.
        resourceObjectId:
          type: string
          description: resource_object_id is the object ID of the found resource.
        permissionship:
          $ref: '#/components/schemas/LookupPermissionship'
          title: permissionship indicates whether the response was partially evaluated or not
        partialCaveatInfo:
          $ref: '#/components/schemas/PartialCaveatInfo'
          title: partial_caveat_info holds information of a partially-evaluated caveated response
        afterResultCursor:
          $ref: '#/components/schemas/v1.Cursor'
          description: 'after_result_cursor holds a cursor that can be used to resume the LookupResources stream after this

            result.'
      description: 'LookupResourcesResponse contains a single matching resource object ID for the

        requested object type, permission, and subject.'
    CheckPermissionResponse:
      type: object
      properties:
        checkedAt:
          $ref: '#/components/schemas/ZedToken'
        permissionship:
          $ref: '#/components/schemas/CheckPermissionResponse.Permissionship'
          description: 'Permissionship communicates whether or not the subject has the requested

            permission or has a relationship with the given resource, over the given

            relation.


            This value will be authzed.api.v1.PERMISSIONSHIP_HAS_PERMISSION if the

            requested subject is a member of the computed permission set or there

            exists a relationship with the requested relation from the given resource

            to the given subject.'
        partialCaveatInfo:
          $ref: '#/components/schemas/PartialCaveatInfo'
          title: partial_caveat_info holds information of a partially-evaluated caveated response
        debugTrace:
          $ref: '#/components/schemas/DebugInformation'
          description: debug_trace is the debugging trace of this check, if requested.
        optionalExpiresAt:
          type: string
          format: date-time
          description: 'optional_expires_at is the time at which at least one of the relationships used to

            compute this result, expires (if any). This is *not* related to the caching window.'
    ResolvedSubject:
      type: object
      properties:
        subjectObjectId:
          type: string
          description: 'subject_object_id is the Object ID of the subject found. May be a `*` if

            a wildcard was found.'
        permissionship:
          $ref: '#/components/schemas/LookupPermissionship'
          title: permissionship indicates whether the response was partially evaluated or not
        partialCaveatInfo:
          $ref: '#/components/schemas/PartialCaveatInfo'
          title: partial_caveat_info holds information of a partially-evaluated caveated response
      description: ResolvedSubject is a single subject resolved within LookupSubjects.
    PermissionType:
      type: string
      enum:
      - PERMISSION_TYPE_UNSPECIFIED
      - PERMISSION_TYPE_RELATION
      - PERMISSION_TYPE_PERMISSION
      default: PERMISSION_TYPE_UNSPECIFIED
    LookupSubjectsResponse:
      type: object
      properties:
        lookedUpAt:
          $ref: '#/components/schemas/ZedToken'
        subjectObjectId:
          type: string
          title: 'subject_object_id is the Object ID of the subject found. May be a `*` if

            a wildcard was found.

            deprecated: use `subject`'
        excludedSubjectIds:
          type: array
          items:
            type: string
          title: 'excluded_subject_ids are the Object IDs of the subjects excluded. This list

            will only contain object IDs if `subject_object_id` is a wildcard (`*`) and

            will only be populated if exclusions exist from the wildcard.

            deprecated: use `excluded_subjects`'
        permissionship:
          $ref: '#/components/schemas/LookupPermissionship'
          title: 'permissionship indicates whether the response was partially evaluated or not

            deprecated: use `subject.permissionship`'
        partialCaveatInfo:
          $ref: '#/components/schemas/PartialCaveatInfo'
          title: 'partial_caveat_info holds information of a partially-evaluated caveated response

            deprecated: use `subject.partial_caveat_info`'
        subject:
          $ref: '#/components/schemas/ResolvedSubject'
          description: subject is the subject found, along with its permissionship.
        excludedSubjects:
          type: array
          items:
            type: object
            $ref: '#/components/schemas/ResolvedSubject'
          description: 'excluded_subjects are the subjects excluded. This list

            will only contain subjects if `subject.subject_object_id` is a wildcard (`*`) and

            will only be populated if exclusions exist from the wildcard.'
        afterResultCursor:
          $ref: '#/components/schemas/v1.Cursor'
          description: 'after_result_cursor holds a cursor that can be used to resume the LookupSubjects stream after this

            result.'
      description: 'LookupSubjectsResponse contains a single matching subject object ID for the

        requested subject object type on the permission or relation.'
    CheckDebugTrace:
      type: object
      properties:
        resource:
          $ref: '#/components/schemas/ObjectReference'
          description: 'resource holds the resource on which the Check was performed.

            for batched calls, the object_id field contains a comma-separated list of object IDs

            for all the resources checked in the batch.'
        permission:
          type: string
          description: permission holds the name of the permission or relation on which the Check was performed.
        permissionType:
          $ref: '#/components/schemas/PermissionType'
          description: permission_type holds information indicating whether it was a permission or relation.
        subject:
          $ref: '#/components/schemas/SubjectReference'
          description: 'subject holds the subject on which the Check was performed. This will be static across all calls within

            the same Check tree.'
        result:
          $ref: '#/components/schemas/CheckDebugTrace.Permissionship'
          description: result holds the result of the Check call.
        caveatEvaluationInfo:
          $ref: '#/components/schemas/CaveatEvalInfo'
          description: caveat_evaluation_info holds information about the caveat evaluated for this step of the trace.
        duration:
          type: string
          description: duration holds the time spent executing this Check operation.
        wasCachedResult:
          type: boolean
          description: was_cached_result, if true, indicates that the result was found in the cache and returned directly.
        subProblems:
          $ref: '#/components/schemas/SubProblems'
          description: 'sub_problems holds the sub problems that were executed to resolve the answer to this Check. An empty list

            and a permissionship of PERMISSIONSHIP_HAS_PERMISSION indicates the subject was found within this relation.'
        optionalExpiresAt:
          type: string
          format: date-time
          description: 'optional_expires_at is the time at which at least one of the relationships used to

            compute this result, expires (if any). This is *not* related to the caching window.'
        traceOperationId:
          type: string
          description: 'trace_operation_id is a unique identifier for this trace''s operation, that will

            be shared for all traces created for the same check operation in SpiceDB.


            In cases where SpiceDB performs automatic batching of subproblems, this ID can be used

            to correlate work that was shared across multiple traces.


            This identifier is generated by SpiceDB, is to be considered opaque to the caller

            and only guaranteed to be unique within the same overall Check or CheckBulk operation.'
        source:
          type: string
          description: 'source holds the source of the result. It is of the form:

            `<sourcetype>:<sourceid>`, where sourcetype can be, among others:

            `spicedb`, `materialize`, etc.'
      description: 'CheckDebugTrace is a recursive trace of the requests made for resolving a CheckPermission

        API call.'
    ZedToken:
      type: object
      properties:
        token:
          type: string
      description: 'ZedToken represents a point in time, or a "revision" in SpiceDB.

        It is used to provide causality metadata between Write and read requests (Check, ReadRelationships, LookupResources, LookupSubjects)

        and can also be used to start watching for changes from a specific point in time.


        See the authzed.api.v1.Consistency message for more information.'
    v1.Cursor:
      type: object
      properties:
        token:
          type: string
      description: 'Cursor is used to provide resumption of listing between calls to APIs

        such as LookupResources.'
    Status:
      type: object
      properties:
        code:
          type: integer
          format: int32
          description: 'The status code, which should be an enum value of

            [google.rpc.Code][google.rpc.Code].'
        message:
          type: string
          description: 'A developer-facing error message, which should be in English. Any

            user-facing error message should be localized and sent in the

            [google.rpc.Status.details][google.rpc.Status.details] field, or localized

            by the client.'
        details:
          type: array
          items:
            type: object
            $ref: '#/components/schemas/Any'
          description: 'A list of messages that carry the error details.  There is a common set of

            message types for APIs to use.'
      description: 'The `Status` type defines a logical error model that is suitable for

        different programming environments, including REST APIs and RPC APIs. It is

        used by [gRPC](https://github.com/grpc). Each `Status` message contains

        three pieces of data: error code, error message, and error details.


        You can find out more about this error model and how to work with it in the

        [API Design Guide](https://cloud.google.com/apis/design/errors).'
    Result:
      type: string
      enum:
      - RESULT_UNSPECIFIED
      - RESULT_UNEVALUATED
      - RESULT_FALSE
      - RESULT_TRUE
      - RESULT_MISSING_SOME_CONTEXT
      default: RESULT_UNSPECIFIED
    AlgebraicSubjectSet:
      type: object
      properties:
        operation:
          $ref: '#/components/schemas/AlgebraicSubjectSet.Operation'
        children:
          type: array
          items:
            type: object
            $ref: '#/components/schemas/PermissionRelationshipTree'
      description: 'AlgebraicSubjectSet is a subject set which is computed based on applying the

        specified operation to the operands according to the algebra of sets.


        UNION is a logical set containing the subject members from all operands.


        INTERSECTION is a logical set containing only the subject members which are

        present in all operands.


        EXCLUSION is a logical set containing only the subject members which are

        present in the first operand, and none of the other operands.'
    ObjectReference:
      type: object
      properties:
        objectType:
          type: string
        objectId:
          type: string
      description: ObjectReference is used to refer to a specific object in the system.
    WildcardOption:
      type: string
      enum:
      - WILDCARD_OPTION_UNSPECIFIED
      - WILDCARD_OPTION_INCLUDE_WILDCARDS
      - WILDCARD_OPTION_EXCLUDE_WILDCARDS
      default: WILDCARD_OPTION_UNSPECIFIED
    ExpandPermissionTreeRequest:
      type: object
      properties:
        consistency:
          $ref: '#/components/schemas/Consistency'
        resource:
          $ref: '#/components/schemas/ObjectReference'
          description: resource is the resource over which to run the expansion.
        permission:
          type: string
          description: 'permission is the name of the permission or relation over which to run the

            expansion for the resource.'
      description: 'ExpandPermissionTreeRequest returns a tree representing the expansion of all

        relationships found accessible from a permission or relation on a particular

        resource.


        ExpandPermissionTreeRequest is typically used to determine the full set of

        subjects with a permission, along with the relationships that grant said

        access.'
    CaveatEvalInfo:
      type: object
      properties:
        expression:
          type: string
          description: expression is the expression that was evaluated.
        result:
          $ref: '#/components/schemas/Result'
          description: result is the result of the evaluation.
        context:
          type: object
          description: context consists of any named values that were used for evaluating the caveat expression.
        partialCaveatInfo:
          $ref: '#/components/schemas/PartialCaveatInfo'
          description: partial_caveat_info holds information of a partially-evaluated caveated response, if applicable.
        caveatName:
          type: string
          description: caveat_name is the name of the caveat that was executed, if applicable.
      description: CaveatEvalInfo holds information about a caveat expression that was evaluated.
    DebugInformation:
      type: object
      properties:
        check:
          $ref: '#/components/schemas/CheckDebugTrace'
          description: check holds debug information about a check request.
        schemaUsed:
          type: string
          description: schema_used holds the schema used for the request.
      description: 'DebugInformation defines debug information returned by an API call in a footer when

        requested with a specific debugging header.


        The specific debug information returned will depend on the type of the API call made.


        See the github.com/authzed/authzed-go project for the specific header and footer names.'
    LookupPermissionship:
      type: string
      enum:
      - LOOKUP_PERMISSIONSHIP_UNSPECIFIED
      - LOOKUP_PERMISSIONSHIP_HAS_PERMISSION
      - LOOKUP_PERMISSIONSHIP_CONDITIONAL_PERMISSION
      default: LOOKUP_PERMISSIONSHIP_UNSPECIFIED
      description: "- LOOKUP_PERMISSIONSHIP_UNSPECIFIED: LOOKUP_PERMISSIONSHIP_UNSPECIFIED is the default value and should not be used or\nrelied upon. Servers should not return this value.\n - LOOKUP_PERMISSIONSHIP_HAS_PERMISSION: LOOKUP_PERMISSIONSHIP_HAS_PERMISSION indicates that the subject has permission\non the resource with no missing caveat context.\n - LOOKUP_PERMISSIONSHIP_CONDITIONAL_PERMISSION: LOOKUP_PERMISSIONSHIP_CONDITIONAL_PERMISSION indicates that the subject has\npermission on the resource, but only if a caveat condition is met. The\n`partial_caveat_info` field in the response should contain the missing context\nfields that must be provided to fully evaluate the caveat."
      title: LookupPermissionship represents whether a Lookup response was partially evaluated or not
    CheckPermissionResponse.Permissionship:
      type: string
      enum:
      - PERMISSIONSHIP_UNSPECIFIED
      - PERMISSIONSHIP_NO_PERMISSION
      - PERMISSIONSHIP_HAS_PERMISSION
      - PERMISSIONSHIP_CONDITIONAL_PERMISSION
      default: PERMISSIONSHIP_UNSPECIFIED
      description: " - PERMISSIONSHIP_UNSPECIFIED: PERMISSIONSHIP_UNSPECIFIED is the default value and should not be used or\nrelied upon. Servers should not return this value.\n - PERMISSIONSHIP_NO_PERMISSION: PERMISSIONSHIP_NO_PERMISSION indicates that the subject does not have the\nrequested permission on the resource.\n - PERMISSIONSHIP_HAS_PERMISSION: PERMISSIONSHIP_HAS_PERMISSION indicates that the subject has the requested\npermission on the resource.\n - PERMISSIONSHIP_CONDITIONAL_PERMISSION: PERMISSIONSHIP_CONDITIONAL_PERMISSION indicates that the subject has the\nrequested permission on the resource, but only if a caveat condition is met.\nThe `partial_caveat_info` field in the response should contain the missing\ncontext fields that must be provided to fully evaluate the caveat."
    PartialCaveatInfo:
      type: object
      properties:
        missingRequiredContext:
          type: array
          items:
            type: string
          title: 'missing_required_context is a list of one or more fields that were missing and prevented caveats

            from being fully evaluated'
      title: 'PartialCaveatInfo carries information necessary for the client to take action

        in the event a response contains a partially evaluated caveat'
    SubjectReference:
      type: object
      properties:
        object:
          $ref: '#/components/schemas/ObjectReference'
        optionalRelation:
          type: string
      title: 'SubjectReference is used for referring to the subject portion of a

        Relationship. The relation component is optional and is used for defining a

        sub-relation on the subject, e.g. group:123#members'
    CheckPermissionRequest:
      type: object
      properties:
        consistency:
          $ref: '#/components/schemas/Consistency'
        resource:
          $ref: '#/components/schemas/ObjectReference'
          description: resource is the resource on which to check the permission or relation.
        permission:
          type: string
          description: 'permission is the name of the permission (or relation) on which to execute

            the check.'
        subject:
          $ref: '#/components/schemas/SubjectReference'
          description: subject is the subject that will be checked for the permission or relation.
        context:
          type: object
          title: context consists of named values that are injected into the caveat evaluation context
        withTracing:
          type: boolean
          description: 'with_tracing, if true, indicates that the response should include a debug trace.

            This can be useful for debugging and performance analysis, but adds a small amount

            of compute overhead to the request.'
      description: 'CheckPermissionRequest issues a check on whether a subject has a permission

        or is a member of a relation, on a specific resource.'
    CheckDebugTrace.Permissionship:
      type: string
      enum:
      - PERMISSIONSHIP_UNSPECIFIED
      - PERMISSIONSHIP_NO_PERMISSION
      - PERMISSIONSHIP_HAS_PERMISSION
      - PERMISSIONSHIP_CONDITIONAL_PERMISSION
      default: PERMISSIONSHIP_UNSPECIFIED
    LookupResourcesRequest:
      type: object
      properties:
        consistency:
          $ref: '#/components/schemas/Consistency'
        resourceObjectType:
          type: string
          description: 'resource_object_type is the type of resource object for which the IDs will

            be returned.'
        permission:
          type: string
          description: 'permission is the name of the permission or relation for which the subject

            must Check.'
        subject:
          $ref: '#/components/schemas/SubjectReference'
          description: subject is the subject with access to the resources.
        context:
          type: object
          title: context consists of named values that are injected into the caveat evaluation context
        optionalLimit:
          type: integer
          format: int64
          description: 'optional_limit, if non-zero, specifies the limit on the number of resources to return

            before the stream is closed on the server side. By default, the stream will continue

            resolving resources until exhausted or the stream is closed due to the client or a

            network issue.'
        optionalCursor:
          $ref: '#/components/schemas/v1.Cursor'
          description: 'optional_cursor, if specified, indicates the cursor after which results should resume being returned.

            The cursor can be found on the LookupResourcesResponse object.'
        withDebug:
          type: boolean
          description: 'with_debug, if true, indicates that the response should return debug information

            if present and available. For now, ONLY enables debugging of maximum recursion depth

            errors, with additional context being returned in error details, but this may be

            extended in the future.'
      description: 'LookupResourcesRequest performs a lookup of all resources of a particular

        kind on which the subject has the specified permission or the relation in

        which the subject exists, streaming back the IDs of those resources.'
    CheckBulkPermissionsResponseItem:
      type: object
      properties:
        permissionship:
          $ref: '#/components/schemas/CheckPermissionResponse.Permissionship'
        partialCaveatInfo:
          $ref: '#/components/schemas/PartialCaveatInfo'
        debugTrace:
          $ref: '#/components/sche

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