--- title: Protocol Buffers API --- The API is divided into the [read APIs](../concepts/25_api-overview.mdx#read-apis) and [write APIs](../concepts/25_api-overview.mdx#write-apis). Each service is annotated with the API it belongs to. ## ory/keto/acl/v1alpha1/acl.proto ### RelationTuple RelationTuple defines a relation between an Object and a Subject. | Field | Type | Label | Description | | --------- | ----------------------------------------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------- | | namespace | [string](#string) | | The namespace this relation tuple lives in. | | object | [string](#string) | | The object related by this tuple. It is an object in the namespace of the tuple. | | relation | [string](#string) | | The relation between an Object and a Subject. | | subject | [Subject](#ory.keto.acl.v1alpha1.Subject) | | The subject related by this tuple. A Subject either represents a concrete subject id or a `SubjectSet` that expands to more Subjects. | ### Subject Subject is either a concrete subject id or a `SubjectSet` expanding to more Subjects. | Field | Type | Label | Description | | ----- | ----------------------------------------------- | ----- | -------------------------------------------------------------------------------------------------------------------------- | | id | [string](#string) | | A concrete id of the subject. | | set | [SubjectSet](#ory.keto.acl.v1alpha1.SubjectSet) | | A subject set that expands to more Subjects. More information are available under [concepts](../concepts/15_subjects.mdx). | ### SubjectSet SubjectSet refers to all subjects who have the same `relation` on an `object`. | Field | Type | Label | Description | | --------- | ----------------- | ----- | ------------------------------------------------------------------------ | | namespace | [string](#string) | | The namespace of the object and relation referenced in this subject set. | | object | [string](#string) | | The object related by this subject set. | | relation | [string](#string) | | The relation between the object and the subjects. | ## ory/keto/acl/v1alpha1/check_service.proto ### CheckService The service that performs authorization checks based on the stored Access Control Lists. This service is part of the [read-APIs](../concepts/25_api-overview.mdx#read-apis). | Method Name | Request Type | Response Type | Description | | ----------- | --------------------------------------------------- | ----------------------------------------------------- | -------------------------------- | | Check | [CheckRequest](#ory.keto.acl.v1alpha1.CheckRequest) | [CheckResponse](#ory.keto.acl.v1alpha1.CheckResponse) | Performs an authorization check. | ### CheckRequest The request for a CheckService.Check RPC. Checks whether a specific subject is related to an object. | Field | Type | Label | Description | | --------- | ----------------------------------------- | ----- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | namespace | [string](#string) | | The namespace to evaluate the check.
Note: If you use the expand-API and the check evaluates a RelationTuple specifying a SubjectSet as subject or due to a rewrite rule in a namespace config this check request may involve other namespaces automatically. | | object | [string](#string) | | The related object in this check. | | relation | [string](#string) | | The relation between the Object and the Subject. | | subject | [Subject](#ory.keto.acl.v1alpha1.Subject) | | The related subject in this check. | | latest | [bool](#bool) | | This field is not implemented yet and has no effect. | | snaptoken | [string](#string) | | This field is not implemented yet and has no effect. | | max_depth | [int32](#int32) | | The maximum depth to search for a relation.
If the value is less than 1 or greater than the global max-depth then the global max-depth will be used instead. | ### CheckResponse The response for a CheckService.Check rpc. | Field | Type | Label | Description | | --------- | ----------------- | ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | allowed | [bool](#bool) | | Whether the specified subject (id) is related to the requested object.
It is false by default if no ACL matches. | | snaptoken | [string](#string) | | This field is not implemented yet and has no effect. | ## ory/keto/acl/v1alpha1/expand_service.proto ### ExpandService The service that performs subject set expansion based on the stored Access Control Lists. This service is part of the [read-APIs](../concepts/25_api-overview.mdx#read-apis). | Method Name | Request Type | Response Type | Description | | ----------- | ----------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------ | | Expand | [ExpandRequest](#ory.keto.acl.v1alpha1.ExpandRequest) | [ExpandResponse](#ory.keto.acl.v1alpha1.ExpandResponse) | Expands the subject set into a tree of subjects. | ### ExpandRequest The request for an ExpandService.Expand RPC. Expands the given subject set. | Field | Type | Label | Description | | --------- | ----------------------------------------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | subject | [Subject](#ory.keto.acl.v1alpha1.Subject) | | The subject to expand. | | max_depth | [int32](#int32) | | The maximum depth of tree to build.
If the value is less than 1 or greater than the global max-depth then the global max-depth will be used instead.
It is important to set this parameter to a meaningful value. Ponder how deep you really want to display this. | | snaptoken | [string](#string) | | This field is not implemented yet and has no effect. | ### ExpandResponse The response for a ExpandService.Expand RPC. | Field | Type | Label | Description | | ----- | ------------------------------------------------- | ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | | tree | [SubjectTree](#ory.keto.acl.v1alpha1.SubjectTree) | | The tree the requested subject set expands to. The requested subject set is the subject of the root.
This field can be nil in some circumstances. | ### SubjectTree | Field | Type | Label | Description | | --------- | ------------------------------------------------- | -------- | ------------------------------------------------------------------------------------ | | node_type | [NodeType](#ory.keto.acl.v1alpha1.NodeType) | | The type of the node. | | subject | [Subject](#ory.keto.acl.v1alpha1.Subject) | | The subject this node represents. | | children | [SubjectTree](#ory.keto.acl.v1alpha1.SubjectTree) | repeated | The children of this node.
This is never set if `node_type` == `NODE_TYPE_LEAF`. | ### NodeType | Name | Number | Description | | ---------------------- | ------ | ---------------------------------------------------------------------------------------------------------- | | NODE_TYPE_UNSPECIFIED | 0 | | | NODE_TYPE_UNION | 1 | This node expands to a union of all children. | | NODE_TYPE_EXCLUSION | 2 | Not implemented yet. | | NODE_TYPE_INTERSECTION | 3 | Not implemented yet. | | NODE_TYPE_LEAF | 4 | This node is a leaf and contains no children. Its subject is a `SubjectID` unless `max_depth` was reached. | ## ory/keto/acl/v1alpha1/read_service.proto ### ReadService The service to query relation tuples. This service is part of the [read-APIs](../concepts/25_api-overview.mdx#read-apis). | Method Name | Request Type | Response Type | Description | | ------------------ | ----------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | -------------------------- | | ListRelationTuples | [ListRelationTuplesRequest](#ory.keto.acl.v1alpha1.ListRelationTuplesRequest) | [ListRelationTuplesResponse](#ory.keto.acl.v1alpha1.ListRelationTuplesResponse) | Lists ACL relation tuples. | ### ListRelationTuplesRequest Request for ReadService.ListRelationTuples RPC. See `ListRelationTuplesRequest_Query` for how to filter the query. | Field | Type | Label | Description | | ----------- | ----------------------------------------------------------------------------------------- | ----- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | query | [ListRelationTuplesRequest.Query](#ory.keto.acl.v1alpha1.ListRelationTuplesRequest.Query) | | All query constraints are concatenated with a logical AND operator.
The RelationTuple list from ListRelationTuplesResponse is ordered from the newest RelationTuple to the oldest. | | expand_mask | [google.protobuf.FieldMask](#google.protobuf.FieldMask) | | This field is not implemented yet and has no effect. | | snaptoken | [string](#string) | | This field is not implemented yet and has no effect. | | page_size | [int32](#int32) | | Optional. The maximum number of RelationTuples to return in the response.
Default: 100 | | page_token | [string](#string) | | Optional. An opaque pagination token returned from a previous call to `ListRelationTuples` that indicates where the page should start at.
An empty token denotes the first page. All successive pages require the token from the previous page. | ### ListRelationTuplesRequest.Query The query for listing relation tuples. Clients can specify any optional field to partially filter for specific relation tuples. Example use cases (namespace is always required): - object only: display a list of all permissions referring to a specific object - relation only: get all groups that have members; get all directories that have content - object & relation: display all subjects that have a specific permission relation - subject & relation: display all groups a subject belongs to; display all objects a subject has access to - object & relation & subject: check whether the relation tuple already exists | Field | Type | Label | Description | | --------- | ----------------------------------------- | ----- | ------------------------------------ | | namespace | [string](#string) | | Required. The namespace to query. | | object | [string](#string) | | Optional. The object to query for. | | relation | [string](#string) | | Optional. The relation to query for. | | subject | [Subject](#ory.keto.acl.v1alpha1.Subject) | | Optional. The subject to query for. | ### ListRelationTuplesResponse The response of a ReadService.ListRelationTuples RPC. | Field | Type | Label | Description | | --------------- | ----------------------------------------------------- | -------- | ------------------------------------------------------------------------------------------------------ | | relation_tuples | [RelationTuple](#ory.keto.acl.v1alpha1.RelationTuple) | repeated | The relation tuples matching the list request. | | next_page_token | [string](#string) | | The token required to get the next page. If this is the last page, the token will be the empty string. | ## ory/keto/acl/v1alpha1/version.proto ### VersionService The service returning the specific Ory Keto instance version. This service is part of the [read-APIs](../concepts/25_api-overview.mdx#read-apis) and [write-APIs](../concepts/25_api-overview.mdx#write-apis). | Method Name | Request Type | Response Type | Description | | ----------- | ------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------- | | GetVersion | [GetVersionRequest](#ory.keto.acl.v1alpha1.GetVersionRequest) | [GetVersionResponse](#ory.keto.acl.v1alpha1.GetVersionResponse) | Returns the version of the Ory Keto instance. | ### GetVersionRequest Request for the VersionService.GetVersion RPC. ### GetVersionResponse Response of the VersionService.GetVersion RPC. | Field | Type | Label | Description | | ------- | ----------------- | ----- | -------------------------------------------- | | version | [string](#string) | | The version string of the Ory Keto instance. | ## ory/keto/acl/v1alpha1/write_service.proto ### WriteService The write service to create and delete Access Control Lists. This service is part of the [write-APIs](../concepts/25_api-overview.mdx#write-apis). | Method Name | Request Type | Response Type | Description | | ---------------------- | ------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | ----------------------------------------------------------- | | TransactRelationTuples | [TransactRelationTuplesRequest](#ory.keto.acl.v1alpha1.TransactRelationTuplesRequest) | [TransactRelationTuplesResponse](#ory.keto.acl.v1alpha1.TransactRelationTuplesResponse) | Writes one or more relation tuples in a single transaction. | | DeleteRelationTuples | [DeleteRelationTuplesRequest](#ory.keto.acl.v1alpha1.DeleteRelationTuplesRequest) | [DeleteRelationTuplesResponse](#ory.keto.acl.v1alpha1.DeleteRelationTuplesResponse) | Deletes relation tuples based on relation query | ### DeleteRelationTuplesRequest | Field | Type | Label | Description | | ----- | --------------------------------------------------------------------------------------------- | ----- | ----------- | | query | [DeleteRelationTuplesRequest.Query](#ory.keto.acl.v1alpha1.DeleteRelationTuplesRequest.Query) | | | ### DeleteRelationTuplesRequest.Query The query for deleting relation tuples | Field | Type | Label | Description | | --------- | ----------------------------------------- | ----- | ------------------------------------ | | namespace | [string](#string) | | Optional. The namespace to query. | | object | [string](#string) | | Optional. The object to query for. | | relation | [string](#string) | | Optional. The relation to query for. | | subject | [Subject](#ory.keto.acl.v1alpha1.Subject) | | Optional. The subject to query for. | ### DeleteRelationTuplesResponse ### RelationTupleDelta Write-delta for a TransactRelationTuplesRequest. | Field | Type | Label | Description | | -------------- | ----------------------------------------------------------------------------- | ----- | -------------------------------------- | | action | [RelationTupleDelta.Action](#ory.keto.acl.v1alpha1.RelationTupleDelta.Action) | | The action to do on the RelationTuple. | | relation_tuple | [RelationTuple](#ory.keto.acl.v1alpha1.RelationTuple) | | The target RelationTuple. | ### TransactRelationTuplesRequest The request of a WriteService.TransactRelationTuples RPC. | Field | Type | Label | Description | | --------------------- | --------------------------------------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------ | | relation_tuple_deltas | [RelationTupleDelta](#ory.keto.acl.v1alpha1.RelationTupleDelta) | repeated | The write delta for the relation tuples operated in one single transaction. Either all actions succeed or no change takes effect on error. | ### TransactRelationTuplesResponse The response of a WriteService.TransactRelationTuples rpc. | Field | Type | Label | Description | | ---------- | ----------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | snaptokens | [string](#string) | repeated | This field is not implemented yet and has no effect. | ### RelationTupleDelta.Action | Name | Number | Description | | ------------------ | ------ | ----------------------------------------------------------------------------------------------------------- | | ACTION_UNSPECIFIED | 0 | Unspecified. The `TransactRelationTuples` RPC ignores this RelationTupleDelta if an action was unspecified. | | INSERT | 1 | Insertion of a new RelationTuple. It is ignored if already existing. | | DELETE | 2 | Deletion of the RelationTuple. It is ignored if it does not exist. | ## Scalar Value Types | .proto Type | Notes | C++ | Java | Python | Go | C# | PHP | Ruby | | ------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | ------ | ---------- | ----------- | ------- | ---------- | -------------- | ------------------------------ | | double | | double | double | float | float64 | double | float | Float | | float | | float | float | float | float32 | float | float | Float | | int32 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) | | int64 | Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. | int64 | long | int/long | int64 | long | integer/string | Bignum | | uint32 | Uses variable-length encoding. | uint32 | int | int/long | uint32 | uint | integer | Bignum or Fixnum (as required) | | uint64 | Uses variable-length encoding. | uint64 | long | int/long | uint64 | ulong | integer/string | Bignum or Fixnum (as required) | | sint32 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) | | sint64 | Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. | int64 | long | int/long | int64 | long | integer/string | Bignum | | fixed32 | Always four bytes. More efficient than uint32 if values are often greater than 2^28. | uint32 | int | int | uint32 | uint | integer | Bignum or Fixnum (as required) | | fixed64 | Always eight bytes. More efficient than uint64 if values are often greater than 2^56. | uint64 | long | int/long | uint64 | ulong | integer/string | Bignum | | sfixed32 | Always four bytes. | int32 | int | int | int32 | int | integer | Bignum or Fixnum (as required) | | sfixed64 | Always eight bytes. | int64 | long | int/long | int64 | long | integer/string | Bignum | | bool | | bool | boolean | boolean | bool | bool | boolean | TrueClass/FalseClass | | string | A string must always contain UTF-8 encoded or 7-bit ASCII text. | string | String | str/unicode | string | string | string | String (UTF-8) | | bytes | May contain any arbitrary sequence of bytes. | string | ByteString | str | []byte | ByteString | string | String (ASCII-8BIT) |