Optimizely Permission Service API

Granular roles and permissions for Feature Experimentation — per-entity permissions for users and teams, plus team management. Introduced 2025-03-18. Harvested verbatim from the provider's published OpenAPI 2026-08-13.

OpenAPI Specification

optimizely-feature-experimentation-permission-service-openapi.json Raw ↑
{"openapi":"3.1.0","info":{"title":"Permission Service","summary":"Permission service for Experimentation","description":"<a href='https://github.com/optimizely/permission-service' target='_blank'>Github repository</a>","version":"0.0.1"},"servers":[{"url":"https://api.optimizely.com/permissions"}],"paths":{"/users/{user_id}/projects/{project_id}/{entity_type}":{"get":{"tags":["Entity"],"summary":"Get User Permissions For Project Entity Type","operationId":"get_user_permissions_for_project_entity_type_users__user_id__projects__project_id___entity_type__get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"integer","title":"Project Id"}},{"name":"entity_type","in":"path","required":true,"schema":{"$ref":"#/components/schemas/EntityTypeInPath"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","title":"Per Page"}},{"name":"page_token","in":"query","required":false,"schema":{"type":"string","title":"Page Token"}},{"name":"page_window","in":"query","required":false,"schema":{"type":"integer","title":"Page Window"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPermissionsForEntityTypeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/teams/{team_id}/projects/{project_id}/{entity_type}":{"get":{"tags":["Entity"],"summary":"Get Team Permissions For Project Entity Type","operationId":"get_team_permissions_for_project_entity_type_teams__team_id__projects__project_id___entity_type__get","parameters":[{"name":"team_id","in":"path","required":true,"schema":{"type":"string","title":"Team Id"}},{"name":"project_id","in":"path","required":true,"schema":{"type":"integer","title":"Project Id"}},{"name":"entity_type","in":"path","required":true,"schema":{"$ref":"#/components/schemas/EntityTypeInPath"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","title":"Per Page"}},{"name":"page_token","in":"query","required":false,"schema":{"type":"string","title":"Page Token"}},{"name":"page_window","in":"query","required":false,"schema":{"type":"integer","title":"Page Window"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamPermissionsForEntityTypeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/projects/{project_id}/{entity_type}/{entity_id}":{"get":{"tags":["Entity"],"summary":"Get Entity Permissions","operationId":"get_entity_permissions_projects__project_id___entity_type___entity_id__get","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"integer","title":"Project Id"}},{"name":"entity_type","in":"path","required":true,"schema":{"$ref":"#/components/schemas/EntityTypeInPath"}},{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","title":"Entity Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityPermissionsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Entity"],"summary":"Change Permissions","operationId":"change_permissions_projects__project_id___entity_type___entity_id__patch","parameters":[{"name":"project_id","in":"path","required":true,"schema":{"type":"integer","title":"Project Id"}},{"name":"entity_type","in":"path","required":true,"schema":{"$ref":"#/components/schemas/EntityTypeInPath"}},{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","title":"Entity Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PatchOperation"},"title":"Operations"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/accounts/{account_id}/teams":{"get":{"tags":["Team Management"],"summary":"Get Teams","description":"Get all teams for an account","operationId":"get_teams_accounts__account_id__teams_get","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TeamInfo"},"title":"Response Get Teams Accounts  Account Id  Teams Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Team Management"],"summary":"Create Team","description":"Create a new team.","operationId":"create_team_accounts__account_id__teams_post","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/accounts/{account_id}/teams/{team_id}":{"delete":{"tags":["Team Management"],"summary":"Delete Team","description":"Delete a team.","operationId":"delete_team_accounts__account_id__teams__team_id__delete","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}},{"name":"team_id","in":"path","required":true,"schema":{"type":"string","title":"Team Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamUpdateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Team Management"],"summary":"Get Team Info","description":"Get team info.","operationId":"get_team_info_accounts__account_id__teams__team_id__get","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}},{"name":"team_id","in":"path","required":true,"schema":{"type":"string","title":"Team Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamInfoResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Team Management"],"summary":"Update Team","description":"Update an existing team's information.","operationId":"update_team_info_accounts__account_id__teams__team_id__patch","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}},{"name":"team_id","in":"path","required":true,"schema":{"type":"string","title":"Team Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamUpdateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AccountRole":{"type":"string","enum":["Administrator","Project Creator","User"],"title":"AccountRole"},"EntityPermission":{"type":"string","enum":["admin","publish","toggle","edit","view","none","unknown"],"title":"EntityPermission"},"EntityPermissionsResponse":{"properties":{"users":{"items":{"$ref":"#/components/schemas/UserPermission"},"type":"array","title":"Users"},"teams":{"items":{"$ref":"#/components/schemas/TeamPermission"},"type":"array","title":"Teams"}},"type":"object","required":["users","teams"],"title":"EntityPermissionsResponse"},"EntityTypeInPath":{"type":"string","enum":["flags","environments","audiences"],"title":"EntityTypeInPath"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"OperationType":{"type":"string","enum":["replace","remove"],"title":"OperationType"},"PatchOperation":{"properties":{"op":{"$ref":"#/components/schemas/OperationType"},"path":{"type":"string","title":"Path"},"value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value"}},"type":"object","required":["op","path"],"title":"PatchOperation","examples":[{"op":"replace","path":"/users/user_abc/role","value":"admin"},{"op":"replace","path":"/teams/12345/role","value":"edit"},{"op":"remove","path":"/users/user_abc/role"}]},"TeamCreateRequest":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"external_ref":{"anyOf":[{"type":"string","maxLength":4096},{"type":"null"}],"title":"External Ref"},"members":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Members"}},"type":"object","required":["name"],"title":"TeamCreateRequest"},"TeamCreateResponse":{"properties":{"message":{"type":"string","title":"Message"},"team_id":{"type":"string","title":"Team Id"}},"type":"object","required":["message","team_id"],"title":"TeamCreateResponse"},"TeamInfo":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"account_id":{"type":"integer","title":"Account Id"},"external_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Ref"},"created":{"type":"string","format":"date-time","title":"Created"},"last_modified":{"type":"string","format":"date-time","title":"Last Modified"},"members_count":{"type":"integer","title":"Members Count"}},"type":"object","required":["id","name","description","account_id","external_ref","created","last_modified","members_count"],"title":"TeamInfo"},"TeamInfoResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"account_id":{"type":"integer","title":"Account Id"},"external_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Ref"},"created":{"type":"string","format":"date-time","title":"Created"},"last_modified":{"type":"string","format":"date-time","title":"Last Modified"},"members_count":{"type":"integer","title":"Members Count"},"members":{"items":{"$ref":"#/components/schemas/TeamUser"},"type":"array","title":"Members"}},"type":"object","required":["id","name","description","account_id","external_ref","created","last_modified","members_count","members"],"title":"TeamInfoResponse"},"TeamPermission":{"properties":{"team_id":{"type":"string","title":"Team Id"},"name":{"type":"string","title":"Name"},"role":{"type":"string","title":"Role"},"external_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Ref"}},"type":"object","required":["team_id","name","role","external_ref"],"title":"TeamPermission"},"TeamPermissionsForEntityTypeResponse":{"properties":{"total":{"type":"integer","title":"Total"},"total_pages":{"type":"integer","title":"Total Pages"},"page":{"type":"integer","title":"Page"},"first_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Url"},"last_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Url"},"next_url":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Next Url"},"prev_url":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Prev Url"},"items":{"items":{"$ref":"#/components/schemas/src__api__dtos__permissions__TeamPermissionsForEntityTypeResponse__ItemInfo"},"type":"array","title":"Items"}},"type":"object","required":["total","total_pages","page","items"],"title":"TeamPermissionsForEntityTypeResponse"},"TeamUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"external_ref":{"anyOf":[{"type":"string","maxLength":4096},{"type":"null"}],"title":"External Ref"},"members_added":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Members Added"},"members_removed":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Members Removed"}},"type":"object","required":["name"],"title":"TeamUpdateRequest"},"TeamUpdateResponse":{"properties":{"message":{"type":"string","title":"Message"}},"type":"object","required":["message"],"title":"TeamUpdateResponse"},"TeamUser":{"properties":{"id":{"type":"string","title":"Id"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email"},"org_role":{"$ref":"#/components/schemas/AccountRole"},"created":{"type":"string","format":"date-time","title":"Created"}},"type":"object","required":["id","first_name","last_name","email","org_role","created"],"title":"TeamUser"},"UserPermission":{"properties":{"role":{"$ref":"#/components/schemas/EntityPermission"},"role_inherited":{"$ref":"#/components/schemas/EntityPermission"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"user_id":{"type":"string","title":"User Id"},"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["role","role_inherited","first_name","last_name","user_id","email"],"title":"UserPermission"},"UserPermissionsForEntityTypeResponse":{"properties":{"total":{"type":"integer","title":"Total"},"total_pages":{"type":"integer","title":"Total Pages"},"page":{"type":"integer","title":"Page"},"first_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Url"},"last_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Url"},"next_url":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Next Url"},"prev_url":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Prev Url"},"items":{"items":{"$ref":"#/components/schemas/src__api__dtos__permissions__UserPermissionsForEntityTypeResponse__ItemInfo"},"type":"array","title":"Items"}},"type":"object","required":["total","total_pages","page","items"],"title":"UserPermissionsForEntityTypeResponse"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"src__api__dtos__permissions__TeamPermissionsForEntityTypeResponse__ItemInfo":{"properties":{"role":{"type":"string","title":"Role"},"id":{"type":"integer","title":"Id"},"key":{"type":"string","title":"Key"},"name":{"type":"string","title":"Name"}},"type":"object","required":["role","id","name"],"title":"ItemInfo"},"src__api__dtos__permissions__UserPermissionsForEntityTypeResponse__ItemInfo":{"properties":{"role":{"type":"string","title":"Role"},"role_inherited":{"type":"string","title":"Role Inherited"},"id":{"type":"integer","title":"Id"},"key":{"type":"string","title":"Key"},"name":{"type":"string","title":"Name"}},"type":"object","required":["role","role_inherited","id","name"],"title":"ItemInfo"}},"securitySchemes":{"BearerAuth":{"description":"To get an API token, see https://docs.developers.optimizely.com/web/docs/personal-token","type":"http","scheme":"bearer"}}},"security":[{"BearerAuth":[]}],"x-readme":{"explorer-enabled":true,"proxy-enabled":true}}