{"openapi":"3.0.0","info":{"title":"Afineo Webservices API — permissions","description":"Module `permissions` of the Afineo API v3 (13 endpoints).\n\nRead-only access to access control configuration: list and retrieve user groups, permission profiles, display masks, and asset statuses. Use this to discover permission structures and their IDs for use in other API calls.\n\nFull specification: https://api.afineo.io/openapi.json","version":"3.0.0","contact":{"name":"Afineo Solutions","url":"https://www.afineo.com"},"x-logo":{"url":"./logo.png","altText":"Afineo - Powerful Data, Powerful People"}},"servers":[{"url":"https://{instance}.afineo.io","description":"Afineo instance","variables":{"instance":{"description":"Your Afineo instance name","default":"client"}}}],"tags":[{"name":"permissions","description":"Read-only access to access control configuration: list and retrieve user groups, permission profiles, display masks, and asset statuses. Use this to discover permission structures and their IDs for use in other API calls."}],"paths":{"/api/v3/permissions/groups/full/":{"post":{"tags":["permissions"],"summary":"Get full user group permissions","description":"## Purpose\n\nReturns complete permissions configuration for all user groups (profiles, statuses, languages, display masks, overloads).\n","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Full user group permissions information response","content":{"application/json":{"schema":{"oneOf":[{"type":"object","title":"Success Response","properties":{"status_code":{"type":"integer","example":1,"description":"Status code (1 = success)"},"status_message":{"type":"string","example":"","description":"Empty string on success"},"result":{"type":"object","properties":{"results_total":{"type":"integer","example":5,"description":"Total number of user groups returned"},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","example":15,"description":"Group ID"},"label":{"type":"string","example":"My group","description":"Group label"},"parent_id":{"type":"integer","example":1511,"description":"Parent group ID"},"parent_label":{"type":"string","example":"My group parent","description":"Parent group label"},"configuration":{"type":"object","properties":{"langs":{"type":"object","additionalProperties":true,"example":{"all_versions":true},"description":"Multilingual"},"default_display_mask":{"type":"object","additionalProperties":{"type":"string"},"nullable":true,"example":{"1025":"A mask"},"description":"Default display mask"},"profiles":{"type":"object","properties":{"asset":{"type":"object","additionalProperties":{"type":"string"},"nullable":true,"example":{"25":"Full rights"},"description":"Asset profile"},"general":{"type":"object","additionalProperties":{"type":"string"},"nullable":true,"example":{"28":"Full rights"},"description":"General profile"},"project":{"type":"object","additionalProperties":{"type":"string"},"nullable":true,"example":{"35":"Full rights"},"description":"Project profile"}}},"status":{"type":"array","items":{"type":"object","properties":{"class_id":{"type":"integer","example":2,"description":"Class ID"},"class_label":{"type":"string","example":"DAM","description":"Class label"},"items":{"type":"object","additionalProperties":{"type":"string"},"example":{"1093":"Active","1096":"Inactive","1114":"Archive"},"description":"Status list by id (key = ID, value = label)"}},"required":["class_id","class_label","items"]},"description":"Status list"},"overload_by_status":{"type":"array","items":{"type":"object","properties":{"class_id":{"type":"integer","example":2,"description":"Class ID"},"class_label":{"type":"string","example":"DAM","description":"Class label"},"items":{"type":"object","properties":{"status_id":{"type":"integer","example":1111,"description":"Status id"},"status_label":{"type":"string","example":"Proposed","description":"Status label"},"profile_asset":{"oneOf":[{"type":"array","items":{"type":"string"},"example":["Default"]},{"type":"object","additionalProperties":{"type":"string"},"example":{"53":"Profile test"}}],"description":"Asset profile"},"mask":{"type":"object","additionalProperties":{"type":"string"},"example":{"1064":"Full display mask"},"description":"Display mask"}},"required":["status_id","status_label"]}},"required":["class_id","class_label","items"]},"description":"Overloaded by status"}},"required":["langs","default_display_mask","profiles","status","overload_by_status"],"description":"Group configuration (langs, default display mask, profiles, statuses and overload by status)"},"users":{"type":"object","additionalProperties":{"type":"string"},"example":{"2187":"login@company.com"},"description":"Users in group"}},"required":["id","label","parent_id","parent_label","configuration","users"]},"description":"Array of user groups objects"}},"required":["results_total","items"]}},"required":["status_code","status_message","result"]},{"type":"object","title":"Error Response","properties":{"status_code":{"type":"integer","example":997,"description":"Status code (997 = action not allowed)"},"status_message":{"type":"string","example":"You don't have the rights to do this action","description":"Error message because no rights"},"result":{"type":"array","items":{"type":"object"},"example":[],"description":"Empty array on error"}},"required":["status_code","status_message","result"]}]}}}}}}},"/api/v3/permissions/groups/get/":{"post":{"tags":["permissions"],"summary":"Get user group details","description":"## Purpose\n\nReturns complete configuration for a specific user group by ID.\n","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"User group information response","content":{"application/json":{"schema":{"oneOf":[{"type":"object","title":"Success Response","properties":{"status_code":{"type":"integer","example":1,"description":"Status code (1 = success)"},"status_message":{"type":"string","example":"","description":"Empty string on success"},"result":{"type":"object","properties":{"id":{"type":"integer","example":15,"description":"Group ID"},"label":{"type":"string","example":"My group","description":"Group label"},"parent_id":{"type":"integer","example":1511,"description":"Parent group ID"},"parent_label":{"type":"string","example":"My group parent","description":"Parent group label"},"configuration":{"type":"object","properties":{"langs":{"type":"object","additionalProperties":true,"example":{"all_versions":true},"description":"Multilingual"},"default_display_mask":{"type":"object","additionalProperties":{"type":"string"},"nullable":true,"example":{"1025":"A mask"},"description":"Default display mask"},"profiles":{"type":"object","properties":{"asset":{"type":"object","additionalProperties":{"type":"string"},"nullable":true,"example":{"25":"Full rights"},"description":"Asset profile"},"general":{"type":"object","additionalProperties":{"type":"string"},"nullable":true,"example":{"28":"Full rights"},"description":"General profile"},"project":{"type":"object","additionalProperties":{"type":"string"},"nullable":true,"example":{"35":"Full rights"},"description":"Project profile"}}},"status":{"type":"array","items":{"type":"object","properties":{"class_id":{"type":"integer","example":2,"description":"Class ID"},"class_label":{"type":"string","example":"DAM","description":"Class label"},"items":{"type":"object","additionalProperties":{"type":"string"},"example":{"1093":"Active","1096":"Inactive","1114":"Archive"},"description":"Status list by id (key = ID, value = label)"}},"required":["class_id","class_label","items"]},"description":"Status list"},"overload_by_status":{"type":"array","items":{"type":"object","properties":{"class_id":{"type":"integer","example":2,"description":"Class ID"},"class_label":{"type":"string","example":"DAM","description":"Class label"},"items":{"type":"object","properties":{"status_id":{"type":"integer","example":1111,"description":"Status id"},"status_label":{"type":"string","example":"Proposed","description":"Status label"},"profile_asset":{"oneOf":[{"type":"array","items":{"type":"string"},"example":["Default"]},{"type":"object","additionalProperties":{"type":"string"},"example":{"53":"Profile test"}}],"description":"Asset profile"},"mask":{"type":"object","additionalProperties":{"type":"string"},"example":{"1064":"Full display mask"},"description":"Display mask"}},"required":["status_id","status_label"]}},"required":["class_id","class_label","items"]},"description":"Overloaded by status"}},"required":["langs","default_display_mask","profiles","status","overload_by_status"],"description":"Group configuration (langs, default display mask, profiles, statuses and overload by status)"},"users":{"type":"object","additionalProperties":{"type":"string"},"example":{"2187":"login@company.com"},"description":"Users in group"}},"required":["id","label","parent_id","parent_label","configuration","users"]}},"required":["status_code","status_message","result"]},{"type":"object","title":"Error Response","properties":{"status_code":{"type":"integer","example":3,"description":"Status code (3 = not found, 997 = action not allowed)"},"status_message":{"type":"string","example":"Group not found","description":"Error message"},"result":{"type":"array","items":{"type":"object"},"example":[],"description":"Empty array on error"}},"required":["status_code","status_message","result"]}]}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","description":"Group ID. Use POST /api/v3/permissions/groups/list to get available user groups.","example":15}},"required":["id"]}}}}}},"/api/v3/permissions/groups/list/":{"post":{"tags":["permissions"],"summary":"List user groups (simplified)","description":"## Purpose\n\nReturns simplified user group list (id, label) for dropdowns and selectors.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Simplified user groups list response","content":{"application/json":{"schema":{"oneOf":[{"type":"object","title":"Success Response","properties":{"status_code":{"type":"integer","example":1,"description":"Status code (1 = success)"},"status_message":{"type":"string","example":"","description":"Empty string on success"},"result":{"type":"object","properties":{"results_total":{"type":"integer","example":5,"description":"Total number of user groups returned"},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","example":15,"description":"Group ID"},"label":{"type":"string","example":"My group","description":"Group label"}},"required":["id","label"]},"description":"Array of simplified user groups objects"}},"required":["results_total","items"]}},"required":["status_code","status_message","result"]},{"type":"object","title":"Error Response","properties":{"status_code":{"type":"integer","example":997,"description":"Status code (997 = action not allowed)"},"status_message":{"type":"string","example":"You don't have the rights to do this action","description":"Error message because no rights"},"result":{"type":"array","items":{"type":"object"},"example":[],"description":"Empty array on error"}},"required":["status_code","status_message","result"]}]}}}}}}},"/api/v3/permissions/masks/assign-attributes/":{"post":{"tags":["permissions"],"summary":"Sync attribute permissions for a display mask, scoped to a library (add, update, remove)","description":"## Purpose\n\nSynchronizes which attributes are visible/editable in a display mask, **scoped to a single library**. Send the **complete desired state** for all attributes of that library in the mask: the endpoint computes a diff and applies additions, updates, and removals automatically.\n\n## Inverse of attributes/assign-masks\n\n- `attributes/assign-masks` — given **one attribute**, sync all its masks\n- `permissions/masks/assign-attributes` — given **one mask**, sync all attributes of a library in that mask\n\n## Library Scope\n\nThe `class_id` parameter scopes the sync to a specific library. Only attributes belonging to that library are considered:\n- Attributes in the request → processed (added/updated/hidden)\n- Attributes of the library currently in the mask but NOT in the request → **removed**\n- Attributes from other libraries in the same mask → **untouched**\n\n## Sync Behavior\n\n- Attribute in request AND in mask → **updated** if permissions differ, **unchanged** if identical\n- Attribute in request but NOT in mask → **added** (unless `permission: \"hidden\"`, which is a no-op)\n- Attribute of this library in mask but NOT in request → **removed**\n- Mask 10 (full display mask) is always rejected with `status_code: 2`\n\n## Partial Failures\n\nInvalid entries (unknown attribute ID or code, missing fields) do NOT fail the whole request — valid entries are still applied and `status_code` remains 1. All failures are reported in `result.errors`.\n\n## Permission Values\n\n- `\"hidden\"` — attribute not visible in this mask (no DB entry)\n- `\"read\"` — attribute visible, read-only\n- `\"write\"` — attribute visible and editable\n\n## locally_editable\n\nOnly applies when `permission: \"write\"`. When `true`, the reference value can be edited locally in assetShare. Ignored for `hidden` and `read` (always stored as false).\n\n## Accepts IDs or Codes\n\n- `id` (mask): integer mask ID only. Use `POST /api/v3/permissions/masks/list/` to list available masks with their IDs and labels.\n- `attribute`: attribute ID (integer or numeric string, e.g. 231) or attribute code (string, case-insensitive). Use `POST /api/v3/attributes/list` with class_id to get available attribute IDs and codes.\n\n## Related Endpoints\n\n- `attributes/assign-masks` — inverse: sync masks for a single attribute\n- `permissions/masks/list` — list available display masks with IDs and labels\n- `permissions/masks/get` — read current attribute permissions for a mask in a library\n","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Sync result response","content":{"application/json":{"schema":{"oneOf":[{"type":"object","title":"Success Response","properties":{"status_code":{"type":"integer","example":1,"description":"Always 1 for this endpoint, even when some entries failed (partial failures are reported in result.errors, not via status_code)"},"status_message":{"type":"string","example":"2 added, 1 updated, 1 removed","description":"Summary of changes. Suffix \"(N error(s))\" is appended when result.errors is non-empty. \"No changes\" when nothing changed."},"result":{"type":"object","properties":{"mask_id":{"type":"integer","example":3,"description":"Resolved mask ID"},"class_id":{"type":"integer","example":4,"description":"Library ID used for scoping"},"attributes":{"type":"array","description":"Per-attribute action details. Covers attributes in the request and attributes removed by sync.","items":{"type":"object","properties":{"attribute_id":{"type":"integer","example":231},"action":{"type":"string","enum":["added","updated","unchanged","removed"],"example":"added"},"permission":{"type":"string","enum":["read","write"],"description":"Absent when action is \"removed\". Always false for locally_editable when permission is \"read\".","example":"write"},"locally_editable":{"type":"boolean","description":"Absent when action is \"removed\". Always false when permission is \"read\".","example":true}}}},"total_added":{"type":"integer","example":2},"total_updated":{"type":"integer","example":1},"total_removed":{"type":"integer","example":1},"cache_refreshed":{"type":"boolean","example":true},"errors":{"type":"array","items":{"type":"string"},"description":"Per-entry errors that did not block execution. Valid entries are still applied.","example":["Attribute not found in class 4: code_inexistant"]}}}},"required":["status_code","status_message","result"]},{"type":"object","title":"Error Response","properties":{"status_code":{"type":"integer","example":2,"description":"Status code 2 when mask not found, mask 10 targeted, or class_id invalid"},"status_message":{"type":"string","example":"Mask 10 (full display mask) cannot be modified","description":"Error message"},"result":{"type":"array","items":{"type":"object"},"example":[],"description":"Empty array on error"}},"required":["status_code","status_message","result"]}]}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","description":"Mask ID. Mask 10 is always rejected. Use POST /api/v3/permissions/masks/list/ to get available mask IDs.","example":1027},"class_id":{"type":"integer","description":"Library ID. Scopes the sync — only attributes of this library are considered. Attributes from other libraries in the same mask are left untouched. Use POST /api/v3/administration/classes/list to get available library IDs.","example":4},"mode":{"type":"string","description":"Assignment mode. Controls ONLY whether attributes absent from the list are removed from the mask. \"replace\" (default) = full SYNC scoped to the library: attributes not in the list are REMOVED from the mask. \"add\" = non-destructive: attributes absent from the list are KEPT. In BOTH modes, each attribute you send is created if missing or UPDATED if already present with a different permission (upsert — NOT insert-only; identical = unchanged; never duplicated).","enum":["replace","add"],"example":"add"},"assignments":{"type":"array","description":"Complete desired attribute state for this mask, scoped to the library. Each entry must have \"attribute\" (integer ID or string code — use POST /api/v3/attributes/list with class_id to discover) and \"permission\" (\"hidden\", \"read\", or \"write\"). Optionally include \"locally_editable\" (boolean, only effective with \"write\"). WARNING: this is a SYNC operation — attributes of this library currently in the mask but absent from this list will be REMOVED. Send an empty array [] to remove all attributes of this library from the mask. (Array of objects - see example for structure)","items":{"type":"object","properties":{"attribute":{"oneOf":[{"type":"integer"},{"type":"string"}],"description":"Attribute ID (integer or numeric string, e.g. 231 or \"231\") or attribute code (string, case-insensitive). Use POST /api/v3/attributes/list with class_id to discover available attributes.","example":231},"permission":{"type":"string","description":"Desired permission level for this attribute in the mask.","enum":["hidden","read","write"],"example":"write"},"locally_editable":{"type":"boolean","description":"Only effective when permission is \"write\". Defaults to false.","example":true}},"required":["attribute","permission"],"title":"Item"}}},"required":["id","class_id","assignments"]}}}}}},"/api/v3/permissions/masks/full/":{"post":{"tags":["permissions"],"summary":"Get all display masks with details","description":"## Purpose\n\nReturns all display masks for a class with attribute-level read/write/hidden permissions.\n","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Display masks information response","content":{"application/json":{"schema":{"oneOf":[{"type":"object","title":"Success Response","properties":{"status_code":{"type":"integer","example":1,"description":"Status code (1 = success)"},"status_message":{"type":"string","example":"","description":"Empty string on success"},"result":{"type":"object","properties":{"results_total":{"type":"integer","example":10,"description":"Total number of display masks returned"},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","example":1025,"description":"Mask ID"},"label":{"type":"string","example":"Standard mask","description":"Mask label"},"class_id":{"type":"integer","example":2,"description":"Class ID"},"class_label":{"type":"string","example":"DAM","description":"Class label"},"attributes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","example":123,"description":"Attribute ID"},"label":{"type":"string","example":"Product name","description":"Attribute label"},"hidden":{"type":"boolean","example":false,"description":"Whether attribute is hidden"},"read":{"type":"boolean","example":true,"description":"Whether attribute is readable"},"write":{"type":"boolean","example":true,"description":"Whether attribute is writable"},"locally_editable":{"type":"boolean","example":false,"description":"Whether attribute is locally editable (asset share)"}},"required":["id","label","hidden","read","write","locally_editable"]},"description":"Attributes configuration for the class"}},"required":["id","label","class_id","class_label","attributes"]}}},"required":["results_total","items"]}},"required":["status_code","status_message","result"]},{"type":"object","title":"Error Response","properties":{"status_code":{"type":"integer","example":997,"description":"Status code (997 = action not allowed)"},"status_message":{"type":"string","example":"You don't have the rights to do this action","description":"Error message because no rights"},"result":{"type":"array","items":{"type":"object"},"example":[],"description":"Empty array on error"}},"required":["status_code","status_message","result"]}]}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"class_id":{"type":"integer","description":"Library identifier (e.g., 4=Products). Use POST /api/v3/administration/classes/list to retrieve available libraries.","example":2}},"required":["class_id"]}}}}}},"/api/v3/permissions/masks/get/":{"post":{"tags":["permissions"],"summary":"Get display mask details","description":"## Purpose\n\nReturns complete mask configuration with attribute-level permissions (read/write/hidden) for a specific class.\n","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Display mask information response","content":{"application/json":{"schema":{"oneOf":[{"type":"object","title":"Success Response","properties":{"status_code":{"type":"integer","example":1,"description":"Status code (1 = success)"},"status_message":{"type":"string","example":"","description":"Empty string on success"},"result":{"type":"object","properties":{"id":{"type":"integer","example":1025,"description":"Mask ID"},"label":{"type":"string","example":"Standard mask","description":"Mask label"},"class_id":{"type":"integer","example":2,"description":"Class ID"},"class_label":{"type":"string","example":"DAM","description":"Class label"},"attributes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","example":123,"description":"Attribute ID"},"label":{"type":"string","example":"Product name","description":"Attribute label"},"hidden":{"type":"boolean","example":false,"description":"Whether attribute is hidden"},"read":{"type":"boolean","example":true,"description":"Whether attribute is readable"},"write":{"type":"boolean","example":true,"description":"Whether attribute is writable"},"locally_editable":{"type":"boolean","example":false,"description":"Whether attribute is locally editable (asset share)"}},"required":["id","label","hidden","read","write","locally_editable"]},"description":"Attributes configuration for the class"}},"required":["id","label","class_id","class_label","attributes"]}},"required":["status_code","status_message","result"]},{"type":"object","title":"Error Response","properties":{"status_code":{"type":"integer","example":3,"description":"Status code (3 = not found, 997 = action not allowed)"},"status_message":{"type":"string","example":"Mask not found","description":"Error message"},"result":{"type":"array","items":{"type":"object"},"example":[],"description":"Empty array on error"}},"required":["status_code","status_message","result"]}]}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","description":"Mask ID. Use POST /api/v3/permissions/masks/list to get available display masks.","example":1025},"class_id":{"type":"integer","description":"Library identifier (e.g., 4=Products). Use POST /api/v3/administration/classes/list to retrieve available libraries.","example":2}},"required":["id","class_id"]}}}}}},"/api/v3/permissions/masks/list/":{"post":{"tags":["permissions"],"summary":"List display masks (simplified)","description":"## Purpose\n\nReturns simplified display mask list (id, label) for dropdowns and selectors.\n","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Simplified display masks list response","content":{"application/json":{"schema":{"oneOf":[{"type":"object","title":"Success Response","properties":{"status_code":{"type":"integer","example":1,"description":"Status code (1 = success)"},"status_message":{"type":"string","example":"","description":"Empty string on success"},"result":{"type":"object","properties":{"results_total":{"type":"integer","example":10,"description":"Total number of display masks returned"},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","example":1025,"description":"Mask ID"},"label":{"type":"string","example":"Standard mask","description":"Mask label"}},"required":["id","label"]}}},"required":["results_total","items"]}},"required":["status_code","status_message","result"]},{"type":"object","title":"Error Response","properties":{"status_code":{"type":"integer","example":997,"description":"Status code (997 = action not allowed)"},"status_message":{"type":"string","example":"You don't have the rights to do this action","description":"Error message because no rights"},"result":{"type":"array","items":{"type":"object"},"example":[],"description":"Empty array on error"}},"required":["status_code","status_message","result"]}]}}}}}}},"/api/v3/permissions/profiles/full/":{"post":{"tags":["permissions"],"summary":"Get full profile permissions","description":"## Purpose\n\nReturns all profiles with complete permissions configuration (module access, universes, mount points, statuses).\n","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Profile permissions information response","content":{"application/json":{"schema":{"oneOf":[{"type":"object","title":"Success Response","properties":{"status_code":{"type":"integer","example":1,"description":"Status code (1 = success)"},"status_message":{"type":"string","example":"","description":"Empty string on success"},"result":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","example":"general","description":"Profile type label : general, project or asset"},"results_total":{"type":"integer","example":5,"description":"Total number of profiles returned for this profile type"},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","example":1415,"description":"Profile ID"},"label":{"type":"string","example":"My profile","description":"Profile label"},"permissions":{"type":"array","items":{"type":"object","properties":{"group":{"type":"string","example":"Access to modules","description":"Group name"},"items":{"type":"object","additionalProperties":true,"example":{"Workflow":true,"FrontCatalog":false},"description":"Dynamic keys : permission name => value (true or false)"}},"required":["group","items"]},"description":"Permissions"},"managed_universe":{"type":"object","additionalProperties":true,"nullable":true,"example":{"5":5},"description":"Universe list"},"user_mount_points":{"type":"object","additionalProperties":true,"nullable":true,"example":{"5":5},"description":"User mount points"},"other_statuses_available":{"type":"object","additionalProperties":{"type":"string"},"nullable":true,"example":{"1093":"Active","1096":"Inactive"},"description":"Statuses to manage"},"assignable_labels":{"type":"object","additionalProperties":true,"nullable":true,"example":{"11":11,"22":22},"description":"Labels to manage"}},"required":["id","label","permissions"],"description":"Profile information"}}},"required":["type","results_total","items"],"description":"List of profiles for the profile type"}}},"required":["status_code","status_message","result"]},{"type":"object","title":"Error Response","properties":{"status_code":{"type":"integer","example":997,"description":"Status code (997 = action not allowed)"},"status_message":{"type":"string","example":"You don't have the rights to do this action","description":"Error message because no rights"},"result":{"type":"array","items":{"type":"object"},"example":[],"description":"Empty array on error"}},"required":["status_code","status_message","result"]}]}}}}}}},"/api/v3/permissions/profiles/get/":{"post":{"tags":["permissions"],"summary":"Get profile details","description":"## Purpose\n\nReturns complete permissions configuration for a specific profile by ID.\n","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Profile information response","content":{"application/json":{"schema":{"oneOf":[{"type":"object","title":"Success Response","properties":{"status_code":{"type":"integer","example":1,"description":"Status code (1 = success)"},"status_message":{"type":"string","example":"","description":"Empty string on success"},"result":{"type":"object","properties":{"id":{"type":"integer","example":1415,"description":"Profile ID"},"label":{"type":"string","example":"My profile","description":"Profile label"},"type":{"type":"string","example":"general","description":"Profile type: general, project or asset"},"permissions":{"type":"array","items":{"type":"object","properties":{"group":{"type":"string","example":"Access to modules","description":"Group name"},"items":{"type":"object","additionalProperties":true,"example":{"Workflow":true,"FrontCatalog":false},"description":"Dynamic keys : permission name => value (true or false)"}},"required":["group","items"]},"description":"Permissions"},"managed_universe":{"type":"object","additionalProperties":true,"nullable":true,"example":{"5":5},"description":"Universe list"},"user_mount_points":{"type":"object","additionalProperties":true,"nullable":true,"example":{"5":5},"description":"User mount points"},"other_statuses_available":{"type":"object","additionalProperties":{"type":"string"},"nullable":true,"example":{"1093":"Active","1096":"Inactive"},"description":"Statuses to manage"},"assignable_labels":{"type":"object","additionalProperties":true,"nullable":true,"example":{"11":11,"22":22},"description":"Labels to manage"}},"required":["id","label","type","permissions"],"description":"Profile information"}},"required":["status_code","status_message","result"]},{"type":"object","title":"Error Response","properties":{"status_code":{"type":"integer","example":3,"description":"Status code (3 = not found, 997 = action not allowed)"},"status_message":{"type":"string","example":"Profile not found","description":"Error message"},"result":{"type":"array","items":{"type":"object"},"example":[],"description":"Empty array on error"}},"required":["status_code","status_message","result"]}]}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","description":"Profile ID. Use POST /api/v3/permissions/profiles/list to get available profiles.","example":1415}},"required":["id"]}}}}}},"/api/v3/permissions/profiles/list/":{"post":{"tags":["permissions"],"summary":"List profiles (simplified)","description":"## Purpose\n\nReturns simplified profile list (id, label, type) grouped by profile type (general, project, asset).\n","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Simplified profiles list response","content":{"application/json":{"schema":{"oneOf":[{"type":"object","title":"Success Response","properties":{"status_code":{"type":"integer","example":1,"description":"Status code (1 = success)"},"status_message":{"type":"string","example":"","description":"Empty string on success"},"result":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","example":"general","description":"Profile type: general, project or asset"},"results_total":{"type":"integer","example":5,"description":"Total number of profiles for this type"},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","example":1415,"description":"Profile ID"},"label":{"type":"string","example":"My profile","description":"Profile label"}},"required":["id","label"]}}},"required":["type","results_total","items"]}}},"required":["status_code","status_message","result"]},{"type":"object","title":"Error Response","properties":{"status_code":{"type":"integer","example":997,"description":"Status code (997 = action not allowed)"},"status_message":{"type":"string","example":"You don't have the rights to do this action","description":"Error message because no rights"},"result":{"type":"array","items":{"type":"object"},"example":[],"description":"Empty array on error"}},"required":["status_code","status_message","result"]}]}}}}}}},"/api/v3/permissions/statuses/full/":{"post":{"tags":["permissions"],"summary":"Get all statuses with details","description":"## Purpose\n\nReturns workflow statuses for a class with full details (default flag, color configuration).\n","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Statuses information response","content":{"application/json":{"schema":{"oneOf":[{"type":"object","title":"Success Response","properties":{"status_code":{"type":"integer","example":1,"description":"Status code (1 = success)"},"status_message":{"type":"string","example":"","description":"Empty string on success"},"result":{"type":"object","properties":{"results_total":{"type":"integer","example":5,"description":"Total number of statuses for this class"},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","example":1093,"description":"Status ID"},"label":{"type":"string","example":"Active","description":"Status label"},"class_id":{"type":"integer","example":2,"description":"Class ID"},"class_label":{"type":"string","example":"DAM","description":"Class label"},"default":{"type":"boolean","example":true,"description":"Whether this is the default status (only for one status by class)"},"color":{"type":"string","nullable":true,"example":"#00FF00","description":"Status color"}},"required":["id","label","class_id","class_label","default","color"]}}},"required":["results_total","items"]}},"required":["status_code","status_message","result"]},{"type":"object","title":"Error Response","properties":{"status_code":{"type":"integer","example":3,"description":"Status code (3 = not found, 997 = action not allowed)"},"status_message":{"type":"string","example":"No statuses found for this class","description":"Error message"},"result":{"type":"array","items":{"type":"object"},"example":[],"description":"Empty array on error"}},"required":["status_code","status_message","result"]}]}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"class_id":{"type":"integer","description":"Library identifier (e.g., 4=Products). Use POST /api/v3/administration/classes/list to retrieve available libraries.","example":2}},"required":["class_id"]}}}}}},"/api/v3/permissions/statuses/get/":{"post":{"tags":["permissions"],"summary":"Get status details","description":"## Purpose\n\nReturns complete status configuration by ID (label, class, default flag, color).\n","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Status information response","content":{"application/json":{"schema":{"oneOf":[{"type":"object","title":"Success Response","properties":{"status_code":{"type":"integer","example":1,"description":"Status code (1 = success)"},"status_message":{"type":"string","example":"","description":"Empty string on success"},"result":{"type":"object","properties":{"id":{"type":"integer","example":1093,"description":"Status ID"},"label":{"type":"string","example":"Active","description":"Status label"},"class_id":{"type":"integer","example":2,"description":"Class ID"},"class_label":{"type":"string","example":"DAM","description":"Class label"},"default":{"type":"boolean","example":true,"description":"Whether this is the default status"},"color":{"type":"string","nullable":true,"example":"#00FF00","description":"Status color"}},"required":["id","label","class_id","class_label","default"]}},"required":["status_code","status_message","result"]},{"type":"object","title":"Error Response","properties":{"status_code":{"type":"integer","example":3,"description":"Status code (3 = not found, 997 = action not allowed)"},"status_message":{"type":"string","example":"Status not found","description":"Error message"},"result":{"type":"array","items":{"type":"object"},"example":[],"description":"Empty array on error"}},"required":["status_code","status_message","result"]}]}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","description":"Status ID. Use POST /api/v3/permissions/statuses/list to get available statuses.","example":1093}},"required":["id"]}}}}}},"/api/v3/permissions/statuses/list/":{"post":{"tags":["permissions"],"summary":"List statuses (simplified)","description":"## Purpose\n\nReturns simplified status list (id, label, class) for a specific class.\n","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Simplified statuses list response","content":{"application/json":{"schema":{"oneOf":[{"type":"object","title":"Success Response","properties":{"status_code":{"type":"integer","example":1,"description":"Status code (1 = success)"},"status_message":{"type":"string","example":"","description":"Empty string on success"},"result":{"type":"object","properties":{"results_total":{"type":"integer","example":5,"description":"Total number of statuses for this class"},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","example":1093,"description":"Status ID"},"label":{"type":"string","example":"Active","description":"Status label"},"class_id":{"type":"integer","example":2,"description":"Class ID"},"class_label":{"type":"string","example":"DAM","description":"Class label"}},"required":["id","label","class_id","class_label"]}}},"required":["results_total","items"]}},"required":["status_code","status_message","result"]},{"type":"object","title":"Error Response","properties":{"status_code":{"type":"integer","example":3,"description":"Status code (3 = not found, 997 = action not allowed)"},"status_message":{"type":"string","example":"No statuses found for this class","description":"Error message"},"result":{"type":"array","items":{"type":"object"},"example":[],"description":"Empty array on error"}},"required":["status_code","status_message","result"]}]}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"class_id":{"type":"integer","description":"Library identifier (e.g., 4=Products). Use POST /api/v3/administration/classes/list to retrieve available libraries.","example":2}},"required":["class_id"]}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"JWT token generated with /api/v3/token/get/"}}}}