/api/v1/right
Access the ACL definitions and the per-context right presets used elsewhere in the API (collections, objects, pools, ...).
GET /right — List all right definitions known to this fylr instance.
Returns the Rights document: the right catalog built from the
built-in rights.yml, plus the system rights contributed by
enabled plugins (named plugin.<plugin>.<right>), plus every saved
object and collection preset. The document is the same for any
authenticated user — it is not filtered per session.
Differs from easydb 5: there is no per-context filter on this
endpoint. easydb 5 documents GET /api/v1/right[/<context>] where
the list can optionally be filtered by context; fylr serves only
GET /right and always returns the full catalog.
Access token in the Authorization header:
Authorization: Bearer <token>.
The right catalog.
The rights catalog — the full inventory of right definitions, capabilities and saved presets known to this fylr instance, partitioned by context.
This is the response of GET /right. Clients use it to render
permission UIs (preset editors, ACL bag editors) and to discover
which rights are available in each context.
Plugins extend the catalog by contributing additional rights to
the system context (named plugin.<plugin_name>.<right>).
No authenticated user. The request must carry a valid access token.
{
"system": {
"capabilities": {
"active": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"preset": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"tagfilter": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"valid": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"sticky": {
"ANY_ADDITIONAL_PROPERTY": "text"
}
},
"rights": [
{
"type": "",
"name": "text",
"comment": "text",
"group": "text",
"has_grantable": true,
"parameters": [
{
"name": "text",
"type": "bool",
"comment": "text",
"choices": [
"text"
],
"merge_policy": ""
}
],
"rights": [
"[Circular Reference]"
]
}
],
"presets": [
{
"_basetype": "right_preset",
"right_preset": {
"_id": 1,
"_version": 1,
"_position": 1,
"displayname": {
"de-DE": "Deutscher text",
"en-US": "English text"
},
"description": {
"de-DE": "Deutscher text",
"en-US": "English text"
},
"preset": {
"default_expiration_hours": 1,
"share_url": "text",
"rights": {
"ANY_ADDITIONAL_PROPERTY": {
"_grantable": true,
"allow_update_and_remove": true,
"classes": [
"text"
],
"extensions": [
"text"
],
"versions": [
"text"
],
"limit": 1,
"mask_ids": {
"ANY_ADDITIONAL_PROPERTY": []
},
"column_ids": [
1
],
"objecttype_ids": [
1
],
"pool_ids": [
1
]
}
},
"tagfilter": {
"all": [
1
],
"any": [
1
],
"not": [
1
],
"changed": [
1
]
}
}
},
"_created_at": "2026-01-01T00:00:00.000Z",
"_updated_at": "2026-01-01T00:00:00.000Z"
}
]
},
"pool": {
"capabilities": {
"active": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"preset": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"tagfilter": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"valid": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"sticky": {
"ANY_ADDITIONAL_PROPERTY": "text"
}
},
"rights": [
{
"type": "",
"name": "text",
"comment": "text",
"group": "text",
"has_grantable": true,
"parameters": [
{
"name": "text",
"type": "bool",
"comment": "text",
"choices": [
"text"
],
"merge_policy": ""
}
],
"rights": [
"[Circular Reference]"
]
}
],
"presets": [
{
"_basetype": "right_preset",
"right_preset": {
"_id": 1,
"_version": 1,
"_position": 1,
"displayname": {
"de-DE": "Deutscher text",
"en-US": "English text"
},
"description": {
"de-DE": "Deutscher text",
"en-US": "English text"
},
"preset": {
"default_expiration_hours": 1,
"share_url": "text",
"rights": {
"ANY_ADDITIONAL_PROPERTY": {
"_grantable": true,
"allow_update_and_remove": true,
"classes": [
"text"
],
"extensions": [
"text"
],
"versions": [
"text"
],
"limit": 1,
"mask_ids": {
"ANY_ADDITIONAL_PROPERTY": []
},
"column_ids": [
1
],
"objecttype_ids": [
1
],
"pool_ids": [
1
]
}
},
"tagfilter": {
"all": [
1
],
"any": [
1
],
"not": [
1
],
"changed": [
1
]
}
}
},
"_created_at": "2026-01-01T00:00:00.000Z",
"_updated_at": "2026-01-01T00:00:00.000Z"
}
]
},
"object": {
"capabilities": {
"active": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"preset": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"tagfilter": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"valid": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"sticky": {
"ANY_ADDITIONAL_PROPERTY": "text"
}
},
"rights": [
{
"type": "",
"name": "text",
"comment": "text",
"group": "text",
"has_grantable": true,
"parameters": [
{
"name": "text",
"type": "bool",
"comment": "text",
"choices": [
"text"
],
"merge_policy": ""
}
],
"rights": [
"[Circular Reference]"
]
}
],
"presets": [
{
"_basetype": "right_preset",
"right_preset": {
"_id": 1,
"_version": 1,
"_position": 1,
"displayname": {
"de-DE": "Deutscher text",
"en-US": "English text"
},
"description": {
"de-DE": "Deutscher text",
"en-US": "English text"
},
"preset": {
"default_expiration_hours": 1,
"share_url": "text",
"rights": {
"ANY_ADDITIONAL_PROPERTY": {
"_grantable": true,
"allow_update_and_remove": true,
"classes": [
"text"
],
"extensions": [
"text"
],
"versions": [
"text"
],
"limit": 1,
"mask_ids": {
"ANY_ADDITIONAL_PROPERTY": []
},
"column_ids": [
1
],
"objecttype_ids": [
1
],
"pool_ids": [
1
]
}
},
"tagfilter": {
"all": [
1
],
"any": [
1
],
"not": [
1
],
"changed": [
1
]
}
}
},
"_created_at": "2026-01-01T00:00:00.000Z",
"_updated_at": "2026-01-01T00:00:00.000Z"
}
]
},
"collection": {
"capabilities": {
"active": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"preset": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"tagfilter": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"valid": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"sticky": {
"ANY_ADDITIONAL_PROPERTY": "text"
}
},
"rights": [
{
"type": "",
"name": "text",
"comment": "text",
"group": "text",
"has_grantable": true,
"parameters": [
{
"name": "text",
"type": "bool",
"comment": "text",
"choices": [
"text"
],
"merge_policy": ""
}
],
"rights": [
"[Circular Reference]"
]
}
],
"presets": [
{
"_basetype": "right_preset",
"right_preset": {
"_id": 1,
"_version": 1,
"_position": 1,
"displayname": {
"de-DE": "Deutscher text",
"en-US": "English text"
},
"description": {
"de-DE": "Deutscher text",
"en-US": "English text"
},
"preset": {
"default_expiration_hours": 1,
"share_url": "text",
"rights": {
"ANY_ADDITIONAL_PROPERTY": {
"_grantable": true,
"allow_update_and_remove": true,
"classes": [
"text"
],
"extensions": [
"text"
],
"versions": [
"text"
],
"limit": 1,
"mask_ids": {
"ANY_ADDITIONAL_PROPERTY": []
},
"column_ids": [
1
],
"objecttype_ids": [
1
],
"pool_ids": [
1
]
}
},
"tagfilter": {
"all": [
1
],
"any": [
1
],
"not": [
1
],
"changed": [
1
]
}
}
},
"_created_at": "2026-01-01T00:00:00.000Z",
"_updated_at": "2026-01-01T00:00:00.000Z"
}
]
},
"tag": {
"capabilities": {
"active": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"preset": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"tagfilter": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"valid": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"sticky": {
"ANY_ADDITIONAL_PROPERTY": "text"
}
},
"rights": [
{
"type": "",
"name": "text",
"comment": "text",
"group": "text",
"has_grantable": true,
"parameters": [
{
"name": "text",
"type": "bool",
"comment": "text",
"choices": [
"text"
],
"merge_policy": ""
}
],
"rights": [
"[Circular Reference]"
]
}
],
"presets": [
{
"_basetype": "right_preset",
"right_preset": {
"_id": 1,
"_version": 1,
"_position": 1,
"displayname": {
"de-DE": "Deutscher text",
"en-US": "English text"
},
"description": {
"de-DE": "Deutscher text",
"en-US": "English text"
},
"preset": {
"default_expiration_hours": 1,
"share_url": "text",
"rights": {
"ANY_ADDITIONAL_PROPERTY": {
"_grantable": true,
"allow_update_and_remove": true,
"classes": [
"text"
],
"extensions": [
"text"
],
"versions": [
"text"
],
"limit": 1,
"mask_ids": {
"ANY_ADDITIONAL_PROPERTY": []
},
"column_ids": [
1
],
"objecttype_ids": [
1
],
"pool_ids": [
1
]
}
},
"tagfilter": {
"all": [
1
],
"any": [
1
],
"not": [
1
],
"changed": [
1
]
}
}
},
"_created_at": "2026-01-01T00:00:00.000Z",
"_updated_at": "2026-01-01T00:00:00.000Z"
}
]
},
"user": {
"capabilities": {
"active": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"preset": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"tagfilter": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"valid": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"sticky": {
"ANY_ADDITIONAL_PROPERTY": "text"
}
},
"rights": [
{
"type": "",
"name": "text",
"comment": "text",
"group": "text",
"has_grantable": true,
"parameters": [
{
"name": "text",
"type": "bool",
"comment": "text",
"choices": [
"text"
],
"merge_policy": ""
}
],
"rights": [
"[Circular Reference]"
]
}
],
"presets": [
{
"_basetype": "right_preset",
"right_preset": {
"_id": 1,
"_version": 1,
"_position": 1,
"displayname": {
"de-DE": "Deutscher text",
"en-US": "English text"
},
"description": {
"de-DE": "Deutscher text",
"en-US": "English text"
},
"preset": {
"default_expiration_hours": 1,
"share_url": "text",
"rights": {
"ANY_ADDITIONAL_PROPERTY": {
"_grantable": true,
"allow_update_and_remove": true,
"classes": [
"text"
],
"extensions": [
"text"
],
"versions": [
"text"
],
"limit": 1,
"mask_ids": {
"ANY_ADDITIONAL_PROPERTY": []
},
"column_ids": [
1
],
"objecttype_ids": [
1
],
"pool_ids": [
1
]
}
},
"tagfilter": {
"all": [
1
],
"any": [
1
],
"not": [
1
],
"changed": [
1
]
}
}
},
"_created_at": "2026-01-01T00:00:00.000Z",
"_updated_at": "2026-01-01T00:00:00.000Z"
}
]
},
"group": {
"capabilities": {
"active": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"preset": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"tagfilter": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"valid": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"sticky": {
"ANY_ADDITIONAL_PROPERTY": "text"
}
},
"rights": [
{
"type": "",
"name": "text",
"comment": "text",
"group": "text",
"has_grantable": true,
"parameters": [
{
"name": "text",
"type": "bool",
"comment": "text",
"choices": [
"text"
],
"merge_policy": ""
}
],
"rights": [
"[Circular Reference]"
]
}
],
"presets": [
{
"_basetype": "right_preset",
"right_preset": {
"_id": 1,
"_version": 1,
"_position": 1,
"displayname": {
"de-DE": "Deutscher text",
"en-US": "English text"
},
"description": {
"de-DE": "Deutscher text",
"en-US": "English text"
},
"preset": {
"default_expiration_hours": 1,
"share_url": "text",
"rights": {
"ANY_ADDITIONAL_PROPERTY": {
"_grantable": true,
"allow_update_and_remove": true,
"classes": [
"text"
],
"extensions": [
"text"
],
"versions": [
"text"
],
"limit": 1,
"mask_ids": {
"ANY_ADDITIONAL_PROPERTY": []
},
"column_ids": [
1
],
"objecttype_ids": [
1
],
"pool_ids": [
1
]
}
},
"tagfilter": {
"all": [
1
],
"any": [
1
],
"not": [
1
],
"changed": [
1
]
}
}
},
"_created_at": "2026-01-01T00:00:00.000Z",
"_updated_at": "2026-01-01T00:00:00.000Z"
}
]
},
"objecttype-without-pool": {
"capabilities": {
"active": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"preset": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"tagfilter": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"valid": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"sticky": {
"ANY_ADDITIONAL_PROPERTY": "text"
}
},
"rights": [
{
"type": "",
"name": "text",
"comment": "text",
"group": "text",
"has_grantable": true,
"parameters": [
{
"name": "text",
"type": "bool",
"comment": "text",
"choices": [
"text"
],
"merge_policy": ""
}
],
"rights": [
"[Circular Reference]"
]
}
],
"presets": [
{
"_basetype": "right_preset",
"right_preset": {
"_id": 1,
"_version": 1,
"_position": 1,
"displayname": {
"de-DE": "Deutscher text",
"en-US": "English text"
},
"description": {
"de-DE": "Deutscher text",
"en-US": "English text"
},
"preset": {
"default_expiration_hours": 1,
"share_url": "text",
"rights": {
"ANY_ADDITIONAL_PROPERTY": {
"_grantable": true,
"allow_update_and_remove": true,
"classes": [
"text"
],
"extensions": [
"text"
],
"versions": [
"text"
],
"limit": 1,
"mask_ids": {
"ANY_ADDITIONAL_PROPERTY": []
},
"column_ids": [
1
],
"objecttype_ids": [
1
],
"pool_ids": [
1
]
}
},
"tagfilter": {
"all": [
1
],
"any": [
1
],
"not": [
1
],
"changed": [
1
]
}
}
},
"_created_at": "2026-01-01T00:00:00.000Z",
"_updated_at": "2026-01-01T00:00:00.000Z"
}
]
}
}GET /right/{context}/presets — List right presets for a context.
Access token in the Authorization header:
Authorization: Bearer <token>.
The context to list presets for.
Array of presets.
A right preset — a reusable bundle of ACL grants (and an optional
tag filter) that can be applied to objects or collections. Presets
live per context (object or collection).
Fixed marker identifying this object as a right preset.
The context path segment is neither object nor collection
(code UnknownEndpointMethod).
No authenticated user. The request must carry a valid access token.
[
{
"_basetype": "right_preset",
"right_preset": {
"_id": 1,
"_version": 1,
"_position": 1,
"displayname": {
"de-DE": "Deutscher text",
"en-US": "English text"
},
"description": {
"de-DE": "Deutscher text",
"en-US": "English text"
},
"preset": {
"default_expiration_hours": 1,
"share_url": "text",
"rights": {
"ANY_ADDITIONAL_PROPERTY": {
"_grantable": true,
"allow_update_and_remove": true,
"classes": [
"text"
],
"extensions": [
"text"
],
"versions": [
"text"
],
"limit": 1,
"mask_ids": {
"ANY_ADDITIONAL_PROPERTY": []
},
"column_ids": [
1
],
"objecttype_ids": [
1
],
"pool_ids": [
1
]
}
},
"tagfilter": {
"all": [
1
],
"any": [
1
],
"not": [
1
],
"changed": [
1
]
}
}
},
"_created_at": "2026-01-01T00:00:00.000Z",
"_updated_at": "2026-01-01T00:00:00.000Z"
}
]POST /right/{context}/presets — Create or update right presets for a context.
Saves one or more presets. A preset whose _version is 1 is
inserted (a new _id is assigned if none was sent); a preset whose
_version is greater than 1 updates the existing preset with that
_id, and the sent _version must equal the stored _version plus
one (otherwise the request fails with 400 VersionMismatch). The
response carries the saved presets.
Supported context values are object and collection. Any other
context value is rejected with status 400 (a generic ServerGeneric
error).
Requires the system.rightpresetmanager right. Rejected with 400
(ReadOnlyMode) when the instance is in read-only mode.
Differs from easydb 5: saving presets can return a 202 confirmation
step driven by the post-save collection-ACL re-validation (re-send
with allow_invalid_acl=true or background_invalid_acl=true).
easydb 5 documents only 200/400/500 for this save and no
confirmation flow.
Access token in the Authorization header:
Authorization: Bearer <token>.
The context the presets apply to.
When true, the post-save collection-ACL validity check does not raise an error if applying the presets would leave some collections with an invalid ACL; the save still persists.
falseWhen true, the collection-ACL re-validation is queued as a background task instead of running synchronously, and the request returns immediately. This is the value the 202 confirmation button re-sends.
falseGo duration (for example 30s) overriding the synchronous time
limit for the collection-ACL re-validation before a 202 is
offered. The default limit is 30s.
A right preset — a reusable bundle of ACL grants (and an optional
tag filter) that can be applied to objects or collections. Presets
live per context (object or collection).
Fixed marker identifying this object as a right preset.
The presets were saved.
A right preset — a reusable bundle of ACL grants (and an optional
tag filter) that can be applied to objects or collections. Presets
live per context (object or collection).
Fixed marker identifying this object as a right preset.
The post-save collection-ACL re-validation needs confirmation before the transaction can commit. Two cases raise this:
- the re-validation exceeded the synchronous time limit — re-send
the same
POSTwithbackground_invalid_acl=trueto run it as a background task; or - applying the presets would leave a collection with an invalid
ACL and the session user may store that collection's ACL —
re-send with
allow_invalid_acl=trueto persist the save and mark the affected collections invalid.
The 202 body carries the button that re-sends the matching parameter.
The request could not be processed (invalid payload, unknown
context, ACL validation failure). The right-check pipeline
rejects presets that reference unknown rights (code
UnknownRight), unknown right parameters (UnknownRightParam),
unaccepted parameter values (UnknownRightValue), or non-unique
choices (ChoiceNotUnique). An unknown context is rejected
with code ServerGeneric; a read-only instance with code
ReadOnlyMode.
No authenticated user. The request must carry a valid access token.
The authenticated user lacks system.rightpresetmanager
(required for the preset save and delete operations).
[
{
"_basetype": "right_preset",
"right_preset": {
"_id": 1,
"_version": 1,
"_position": 1,
"displayname": {
"de-DE": "Deutscher text",
"en-US": "English text"
},
"description": {
"de-DE": "Deutscher text",
"en-US": "English text"
},
"preset": {
"default_expiration_hours": 1,
"share_url": "text",
"rights": {
"ANY_ADDITIONAL_PROPERTY": {
"_grantable": true,
"allow_update_and_remove": true,
"classes": [
"text"
],
"extensions": [
"text"
],
"versions": [
"text"
],
"limit": 1,
"mask_ids": {
"ANY_ADDITIONAL_PROPERTY": []
},
"column_ids": [
1
],
"objecttype_ids": [
1
],
"pool_ids": [
1
]
}
},
"tagfilter": {
"all": [
1
],
"any": [
1
],
"not": [
1
],
"changed": [
1
]
}
}
},
"_created_at": "2026-01-01T00:00:00.000Z",
"_updated_at": "2026-01-01T00:00:00.000Z"
}
]GET /right/{context}/presets/{presetId} — Retrieve a single right preset.
The matching preset is returned wrapped in a one-element array — the
response is always an array. An unknown presetId yields an empty
array [] with status 200, not a 404.
Access token in the Authorization header:
Authorization: Bearer <token>.
The context the preset applies to.
The preset's _id.
The matching preset wrapped in a one-element array, or an empty
array if no preset matches the id in this context.
A right preset — a reusable bundle of ACL grants (and an optional
tag filter) that can be applied to objects or collections. Presets
live per context (object or collection).
Fixed marker identifying this object as a right preset.
The context path segment is neither object nor collection
(code UnknownEndpointMethod).
No authenticated user. The request must carry a valid access token.
[
{
"_basetype": "right_preset",
"right_preset": {
"_id": 1,
"_version": 1,
"_position": 1,
"displayname": {
"de-DE": "Deutscher text",
"en-US": "English text"
},
"description": {
"de-DE": "Deutscher text",
"en-US": "English text"
},
"preset": {
"default_expiration_hours": 1,
"share_url": "text",
"rights": {
"ANY_ADDITIONAL_PROPERTY": {
"_grantable": true,
"allow_update_and_remove": true,
"classes": [
"text"
],
"extensions": [
"text"
],
"versions": [
"text"
],
"limit": 1,
"mask_ids": {
"ANY_ADDITIONAL_PROPERTY": []
},
"column_ids": [
1
],
"objecttype_ids": [
1
],
"pool_ids": [
1
]
}
},
"tagfilter": {
"all": [
1
],
"any": [
1
],
"not": [
1
],
"changed": [
1
]
}
}
},
"_created_at": "2026-01-01T00:00:00.000Z",
"_updated_at": "2026-01-01T00:00:00.000Z"
}
]DELETE /right/{context}/presets/{presetId} — Delete a right preset.
Deletes the preset with the given _id. Deleting an unknown
presetId is a no-op that still returns 200. If the preset is still
referenced by any right row that is either not tied to a specific
object or tied to a current (latest, non-deleted) object, the first
request returns 202 instead of deleting; re-send with
confirm=delete to confirm. On confirm the preset is removed and the
database cascade deletes every right row that references it
(including rows on archived object versions).
Requires the system.rightpresetmanager right. Rejected with 400
(ReadOnlyMode) when the instance is in read-only mode.
Differs from easydb 5: deleting a referenced preset returns a 202
confirmation step (re-send with confirm=delete) instead of
deleting outright. easydb 5 documents only 200/400/500 for this
delete and no confirmation flow.
Access token in the Authorization header:
Authorization: Bearer <token>.
Set confirm=delete to confirm deletion of a preset that is
still referenced by a right row; without it such a delete returns
202 instead of deleting. The 202's button re-sends this parameter.
The preset was deleted. Deleting an unknown presetId also
returns this acknowledgement.
The preset is still referenced by a right row that is either
not tied to a specific object or tied to a current (latest,
non-deleted) object. Re-send the same DELETE with
confirm=delete to delete the preset; the database cascade then
removes every right row that references it (including rows on
archived object versions).
The request could not be processed. A read-only instance rejects
the delete with code ReadOnlyMode.
No authenticated user. The request must carry a valid access token.
The authenticated user lacks system.rightpresetmanager
(required for the preset save and delete operations).
{
"status": {
"acknowledged": "ok"
}
}Last updated