When a model is written to Permify using the write schema API a schema version will be returned by the API. That schema version can be used to inspect the schema.Permify Schema needed to be send to API endpoint /v1/tenants//schemas/read for configuration of your authorization model on Permify API.
Identifier of the tenant, if you are not using multi-tenancy (have only one tenant) use pre-inserted tenant t1 for this field. Required, and must match the pattern \“[a-zA-Z0-9-,]+\“, max 64 bytes.
Body
application/json
SchemaReadRequest is the request message for the Read method in the Schema service.
It contains tenant_id and metadata about the schema to be read.
SchemaReadRequestMetadata provides additional information for the Schema Read request.
It contains schema_version to specify which version of the schema should be read.
Show child attributes
Response
A successful response.
SchemaReadResponse is the response message for the Read method in the Schema service.
It returns the requested schema.
The SchemaDefinition message provides definitions for entities and rules,
and includes references to clarify whether a name refers to an entity or a rule.
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"FGA Documentation","colors":{"primary":"#F58320","light":"#fb923c","dark":"#ea580c"},"logo":{"light":"https://mintcdn.com/permify/s--v0P7cOOW3QatA/logo/light.svg?fit=max\u0026auto=format\u0026n=s--v0P7cOOW3QatA\u0026q=85\u0026s=35df6af816b704ec52d1461bb85c5057","dark":"https://mintcdn.com/permify/s--v0P7cOOW3QatA/logo/dark.svg?fit=max\u0026auto=format\u0026n=s--v0P7cOOW3QatA\u0026q=85\u0026s=3cba8f1833c1058096bf4924e49f8931","href":"/"},"favicon":"https://mintcdn.com/permify/s--v0P7cOOW3QatA/favicon.png?fit=max\u0026auto=format\u0026n=s--v0P7cOOW3QatA\u0026q=85\u0026s=f88a89d54d5d30758364ce67ba61ef7f","appearance":{"default":"light","strict":false},"background":{"color":{"light":"#ffffff","dark":"#0f172a"}},"navbar":{"links":[{"href":"/docs/","label":"FusionAuth Documentation"}]},"footer":{"socials":{"twitter":"https://twitter.com/getPermify","github":"https://github.com/Permify/permify","linkedin":"https://www.linkedin.com/company/permifyco"}},"fonts":{"heading":{"family":"Inter","weight":600},"body":{"family":"Inter","weight":400}},"integrations":{"ga4":{"measurementId":"G-BSRXWHBYR1"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"permify","hasAudioNarration":false,"actualSubdomain":"permify","customDomains":["proxy-docs.permify.co"],"gitSource":{"type":"github","owner":"permify","repo":"permify","deployBranch":"master","contentDirectory":"docs","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ac93fe89fc187d74aef743c","collectionId":"84e2b1d9-d591-4fff-bec3-0e97ed69fcc7","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ac93fe89fc187d74aef743c"},"entitlements":{},"buildId":"6ac94f72a62963626e080c1f","clientVersion":"0.0.3965","searchFilterCounts":[{"language":"default","tag":"FGA Documentation","count":57},{"language":"default","tag":"API References","count":24},{"language":"default","tag":"Getting Started","count":12},{"language":"default","tag":"Setting Up","count":12},{"language":"default","tag":"Deployment","count":11},{"language":"default","tag":"Modeling Guides","count":10},{"language":"default","tag":"Permission Service","count":7},{"language":"default","tag":"Real World Examples","count":7},{"language":"default","tag":"Operations","count":6},{"language":"default","tag":"Use Cases","count":6}]},"assistantConfig":{},"hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[{"filePath":"custom.css","content":"/* cyrillic-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2JL7SUc.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa0ZL7SUc.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* greek-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2ZL7SUc.woff2) format('woff2');\n unicode-range: U+1F00-1FFF;\n}\n/* greek */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1pL7SUc.woff2) format('woff2');\n unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa2pL7SUc.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa25L7SUc.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Inter';\n font-style: normal;\n font-weight: 100 900;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/inter/v20/UcC73FwrK3iLTeHuS_nVMrMxCp50SjIa1ZL7.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n*,::after,::before{font-family:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',system-ui,sans-serif!important}code,kbd,pre,samp,tt{font-family:'JetBrains Mono','Fira Code','Menlo','Monaco','Consolas',monospace!important}html:not(.dark) span#background-color{background:0 0!important}html:not(.dark){background-color:#fff!important;background-image:radial-gradient(768px at right top,rgba(199,210,254,.65) 0,#fff 80%),linear-gradient(rgba(99,102,241,.4) 1px,transparent 1px),linear-gradient(90deg,rgba(99,102,241,.4) 1px,transparent 1px)!important;background-size:100% 30000px,34px 34px,34px 34px!important;background-position:0 0,0 0,0 0!important;background-repeat:no-repeat,repeat,repeat!important;background-attachment:local,local,local!important}:root{--fa-orange:#F58320;--fa-orange-light:#fb923c;--fa-orange-dark:#ea580c;--fa-slate-800:#1e293b;--fa-slate-700:#334155;--fa-slate-100:#F1F5F9;--fa-slate-200:#E2E8F0}#banner{background-color:var(--fa-slate-800)!important;border-bottom:2px solid var(--fa-orange)!important}#banner a{color:var(--fa-orange-light)!important;text-decoration:underline!important}#banner,#banner a:hover{color:#fff!important}#navbar{background-color:#0f172a!important;border-bottom:1px solid #334155!important}#navbar #navbar-transition{background-color:transparent!important}#navbar a,#navbar button:hover{color:#e2e8f0!important}#navbar a:hover,#navbar li.navbar-link a:hover{color:var(--fa-orange-light)!important}#navbar li.navbar-link a{color:#fff!important;font-size:.875rem!important;font-weight:600!important;letter-spacing:-.01em!important;opacity:1!important}#navbar button{color:#94a3b8!important}#navbar a[data-slot=context-menu-trigger]{display:inline-flex!important;align-items:center!important}#navbar a[data-slot=context-menu-trigger] img{height:3rem!important;width:auto!important;order:1}#navbar a[data-slot=context-menu-trigger]::before{content:\"/\";color:#64748b;font-size:1.5rem;font-weight:300;margin-left:.75rem;margin-right:.375rem;line-height:1;order:2}#navbar a[data-slot=context-menu-trigger]::after{content:\"FGA Docs\";color:#fff;font-size:1.5rem;font-weight:700;letter-spacing:-.025em;line-height:1;order:3}[data-testid=sidebar] a[aria-current=page],aside a[aria-current=page]{border-left:3px solid var(--fa-orange)!important;color:var(--fa-orange-dark)!important;font-weight:600!important;background-color:rgba(245,131,32,.06)!important}[data-testid=sidebar] h3,aside h3{color:var(--fa-slate-800)!important;text-transform:uppercase!important;font-size:.7rem!important;letter-spacing:.06em!important;font-weight:700!important}:is(.dark) [data-testid=sidebar] h3,:is(.dark) aside h3{color:var(--fa-slate-200)!important}[data-testid=sidebar] a,aside a{color:var(--fa-slate-700)!important;transition:color .15s ease!important}[data-testid=sidebar] a:hover,aside a:hover{color:var(--fa-orange)!important}:is(.dark) [data-testid=sidebar] a,:is(.dark) aside a{color:#cbd5e1!important}:is(.dark) [data-testid=sidebar] a:hover,:is(.dark) aside a:hover{color:var(--fa-orange-light)!important}.cta-button,[data-testid=cta-button],a[class*=Button],button[class*=primary]{background-color:var(--fa-orange)!important;border-color:var(--fa-orange)!important;color:#fff!important;border-radius:6px!important;transition:background-color .15s ease!important}.cta-button:hover,[data-testid=cta-button]:hover,a[class*=Button]:hover,button[class*=primary]:hover{background-color:var(--fa-orange-dark)!important;border-color:var(--fa-orange-dark)!important}.prose a,article a,main a:not([class]){color:var(--fa-orange-dark)!important;text-decoration-color:rgba(245,131,32,.3)!important}.prose a:hover,article a:hover,main a:not([class]):hover{color:var(--fa-orange)!important;text-decoration-color:var(--fa-orange)!important}:is(.dark) .prose a,:is(.dark) article a,:is(.dark) main a:not([class]){color:var(--fa-orange-light)!important}[class*=AnchorCard],[class*=anchor-card]{border:1px solid var(--fa-slate-200)!important;border-radius:8px!important;transition:border-color .15s ease,box-shadow .15s ease!important}[class*=AnchorCard]:hover,[class*=anchor-card]:hover{border-color:var(--fa-orange)!important;box-shadow:0 2px 8px rgba(245,131,32,.12)!important}.prose h1,.prose h2,.prose h3,article h1,article h2,article h3{color:var(--fa-slate-800)!important}:is(.dark) .prose h1,:is(.dark) .prose h2,:is(.dark) .prose h3,:is(.dark) article h1,:is(.dark) article h2,:is(.dark) article h3{color:#f1f5f9!important}code,pre{border-radius:6px!important}pre{background-color:#1f273b!important}:is(.dark) pre{background-color:#00081a!important}:not(pre)>code{background-color:#f1f5f9!important;color:var(--fa-slate-800)!important;padding:.15em .4em!important;border-radius:4px!important;font-size:.875em!important}:is(.dark) :not(pre)>code{background-color:#1e293b!important;color:#e2e8f0!important}table th{background-color:var(--fa-slate-800)!important;color:#fff!important;font-weight:600!important}:is(.dark) table th{background-color:#0f172a!important}table tr:nth-child(even){background-color:rgba(241,245,249,.5)!important}:is(.dark) table tr:nth-child(even){background-color:rgba(30,41,59,.3)!important}[role=tab][aria-selected=true]{color:var(--fa-orange)!important;border-bottom-color:var(--fa-orange)!important}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-thumb{background:#94a3b8;border-radius:3px}::-webkit-scrollbar-track{background:0 0}::selection{background-color:rgba(245,131,32,.2);color:inherit}[class*=Feedback] button:hover,[class*=feedback] button:hover{color:var(--fa-orange)!important}[class*=Badge],[class*=badge]{border-radius:4px!important}[class*=highlight],mark{background-color:rgba(245,131,32,.15)!important}[class*=Card],[class*=card]{border-radius:8px!important}"}],"page":{"pagePath":"api-reference/schema/read-schema","slug":"/api-reference/schema/read-schema","pageMetadata":{"title":"Read Schema","openapi":"post /v1/tenants/{tenant_id}/schemas/read","description":null,"href":"/api-reference/schema/read-schema"},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,img:`img`,p:`p`,strong:`strong`,..._provideComponents(),...props.components},{Heading}=_components;if(!Heading)_missingMdxReference(`Heading`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`When a model is written to Permify using the `,_jsx(_components.a,{href:`/api-reference/schema/write-schema`,children:`write schema API`}),` a schema version will be returned by the API. That schema version can be used to inspect the schema.`]}),`\n`,_jsxs(_components.p,{children:[`Permify Schema needed to be send to API endpoint `,_jsxs(_components.strong,{children:[`/v1/tenants/`,`/schemas/read`]}),` for configuration of your authorization model on Permify API.`]}),`\n`,_jsx(Heading,{level:`3`,id:`example-request-on-postman`,children:`Example Request on Postman`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`POST`}),` `,_jsx(_components.code,{children:`/v1/tenants/{tenant_id}/schemas/read`})]}),`\n`,_jsx(_components.p,{children:_jsx(_components.img,{src:`https://github.com/Permify/permify/assets/30985448/a6944e3d-6a58-4489-b16f-da2fdf5f60f2`,alt:`permify-schema`})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Read Schema","openapi":"post /v1/tenants/{tenant_id}/schemas/read","description":null,"href":"/api-reference/schema/read-schema"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Example Request on Postman","slug":"example-request-on-postman","depth":3,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/permify/03abf5c771cc7674/gurubase.js"],"openApiReferenceData":{"operation":{"summary":"read schema","operationId":"schemas.read","responses":{"200":"b56af75f-e925-4976-8360-50cea7a5700a","default":"ca97e842-8ed3-4897-a532-88a0e7ede01a"},"parameters":["a8c80d2b-646d-409c-8d7b-3d64a0d90f73"],"requestBody":"a5ffb126-f9f2-4a79-9f3a-11257c6c69d7","tags":["Schema"],"x-codeSamples":[{"label":"go","lang":"go","source":"sr, err := client.Schema.Read(context.Background(), \u0026v1.SchemaReadRequest{\n TenantId: \"t1\",\n Metadata: \u0026v1.SchemaReadRequestMetadata{\n SchemaVersion: \"cnbe6se5fmal18gpc66g\",\n },\n})"},{"label":"node","lang":"javascript","source":"let res = client.schema.read({\n tenantId: \"t1\",\n metadata: {\n schemaVersion: swResponse.schemaVersion,\n },\n})"},{"label":"cURL","lang":"curl","source":"curl --location --request POST 'localhost:3476/v1/tenants/{tenant_id}/schemas/read' \\\n--header 'Content-Type: application/json' \\\n--data-raw '{\n \"metadata\": {\n \"schema_version\": \"cnbe6se5fmal18gpc66g\"\n }\n}'"}],"method":"post","type":"path","servers":[],"security":[],"path":"/v1/tenants/{tenant_id}/schemas/read","baseUrlOptions":[],"title":"read schema","description":"","codeSamples":[{"label":"go","lang":"go","source":"sr, err := client.Schema.Read(context.Background(), \u0026v1.SchemaReadRequest{\n TenantId: \"t1\",\n Metadata: \u0026v1.SchemaReadRequestMetadata{\n SchemaVersion: \"cnbe6se5fmal18gpc66g\",\n },\n})"},{"label":"node","lang":"javascript","source":"let res = client.schema.read({\n tenantId: \"t1\",\n metadata: {\n schemaVersion: swResponse.schemaVersion,\n },\n})"},{"label":"cURL","lang":"curl","source":"curl --location --request POST 'localhost:3476/v1/tenants/{tenant_id}/schemas/read' \\\n--header 'Content-Type: application/json' \\\n--data-raw '{\n \"metadata\": {\n \"schema_version\": \"cnbe6se5fmal18gpc66g\"\n }\n}'"}],"requiredOnlyExamples":false,"requestExampleType":"codeSamples","responseExampleType":"generated"},"dependencies":{"parameters":{"a8c80d2b-646d-409c-8d7b-3d64a0d90f73":{"name":"tenant_id","description":"Identifier of the tenant, if you are not using multi-tenancy (have only one tenant) use pre-inserted tenant \u003ccode>t1\u003c/code> for this field. Required, and must match the pattern \\“[a-zA-Z0-9-,]+\\“, max 64 bytes.","in":"path","required":true,"schema":{"type":"string","isRequired":true,"description":"Identifier of the tenant, if you are not using multi-tenancy (have only one tenant) use pre-inserted tenant \u003ccode>t1\u003c/code> for this field. Required, and must match the pattern \\“[a-zA-Z0-9-,]+\\“, max 64 bytes.","uniqueKey":"","typeLabel":"string"}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"object","properties":{"schema_version":{"type":"string","description":"schema_version is the string that identifies the version of the schema to be read.","uniqueKey":"metadata.schema_version","typeLabel":"string"}},"description":"SchemaReadRequestMetadata provides additional information for the Schema Read request.\nIt contains schema_version to specify which version of the schema should be read.","uniqueKey":"metadata","typeLabel":"object"}},"description":"SchemaReadRequest is the request message for the Read method in the Schema service.\nIt contains tenant_id and metadata about the schema to be read.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"metadata":{"schema_version":"\u003cstring>"}}}},"exampleType":"generated"}},"required":true,"exampleType":"generated"},"responses":{"b56af75f-e925-4976-8360-50cea7a5700a":{"description":"A successful response.","content":{"application/json":{"schema":{"type":"object","properties":{"schema":{"type":"object","properties":{"entityDefinitions":{"type":"object","additionalProperties":{"type":"object","properties":{"name":{"type":"string","description":"The name of the entity, which follows a specific string pattern and has a maximum byte size.","uniqueKey":"schema.entityDefinitions.additionalProperties.name","typeLabel":"string"},"relations":{"type":"object","additionalProperties":{"type":"object","properties":{"name":{"type":"string","description":"The name of the relation, which follows a specific string pattern and has a maximum byte size.","uniqueKey":"schema.entityDefinitions.additionalProperties.relations.additionalProperties.name","typeLabel":"string"},"relationReferences":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"The type of the referenced entity, which follows a specific string pattern and has a maximum byte size.","uniqueKey":"schema.entityDefinitions.additionalProperties.relations.additionalProperties.relationReferences.items.[INDEX].type","typeLabel":"string"},"relation":{"type":"string","description":"The name of the referenced relation, which follows a specific string pattern and has a maximum byte size.","uniqueKey":"schema.entityDefinitions.additionalProperties.relations.additionalProperties.relationReferences.items.[INDEX].relation","typeLabel":"string"}},"description":"The RelationReference message provides a reference to a specific relation.","uniqueKey":"schema.entityDefinitions.additionalProperties.relations.additionalProperties.relationReferences.items.[INDEX]","typeLabel":"object"},"description":"A list of references to other relations.","uniqueKey":"schema.entityDefinitions.additionalProperties.relations.additionalProperties.relationReferences","typeLabel":"object[]"}},"description":"The RelationDefinition message provides detailed information about a specific relation.","uniqueKey":"schema.entityDefinitions.additionalProperties.relations.additionalProperties","typeLabel":"object"},"description":"Map of relation definitions within this entity. The key is the relation name, and the value is the RelationDefinition.","uniqueKey":"schema.entityDefinitions.additionalProperties.relations","typeLabel":"object"},"permissions":{"type":"object","additionalProperties":{"type":"object","properties":{"name":{"type":"string","description":"The name of the permission, which follows a specific string pattern and has a maximum byte size.","uniqueKey":"schema.entityDefinitions.additionalProperties.permissions.additionalProperties.name","typeLabel":"string"},"child":{"type":"object","properties":{"leaf":{"type":"object","properties":{"computedUserSet":{"type":"object","properties":{"relation":{"type":"string","title":"Relation name","uniqueKey":"schema.entityDefinitions.additionalProperties.permissions.additionalProperties.child.leaf.computedUserSet.relation","typeLabel":"string"}},"description":"ComputedUserSet defines a set of computed users which includes the relation name.","uniqueKey":"schema.entityDefinitions.additionalProperties.permissions.additionalProperties.child.leaf.computedUserSet","typeLabel":"object"},"tupleToUserSet":{"type":"object","properties":{"tupleSet":{"type":"object","properties":{"relation":{"type":"string","uniqueKey":"schema.entityDefinitions.additionalProperties.permissions.additionalProperties.child.leaf.tupleToUserSet.tupleSet.relation","typeLabel":"string"}},"description":"TupleSet represents a set of tuples associated with a specific relation.","uniqueKey":"schema.entityDefinitions.additionalProperties.permissions.additionalProperties.child.leaf.tupleToUserSet.tupleSet","typeLabel":"object"},"computed":{"type":"object","properties":{"relation":{"type":"string","title":"Relation name","uniqueKey":"schema.entityDefinitions.additionalProperties.permissions.additionalProperties.child.leaf.tupleToUserSet.computed.relation","typeLabel":"string"}},"description":"ComputedUserSet defines a set of computed users which includes the relation name.","uniqueKey":"schema.entityDefinitions.additionalProperties.permissions.additionalProperties.child.leaf.tupleToUserSet.computed","typeLabel":"object"}},"description":"TupleToUserSet defines a mapping from tuple sets to computed user sets.","uniqueKey":"schema.entityDefinitions.additionalProperties.permissions.additionalProperties.child.leaf.tupleToUserSet","typeLabel":"object"},"computedAttribute":{"type":"object","properties":{"name":{"type":"string","title":"Name of the computed attribute","uniqueKey":"schema.entityDefinitions.additionalProperties.permissions.additionalProperties.child.leaf.computedAttribute.name","typeLabel":"string"}},"description":"ComputedAttribute defines a computed attribute which includes its name.","uniqueKey":"schema.entityDefinitions.additionalProperties.permissions.additionalProperties.child.leaf.computedAttribute","typeLabel":"object"},"call":{"type":"object","properties":{"ruleName":{"type":"string","title":"Name of the rule","uniqueKey":"schema.entityDefinitions.additionalProperties.permissions.additionalProperties.child.leaf.call.ruleName","typeLabel":"string"},"arguments":{"type":"array","items":{"type":"object","properties":{"computedAttribute":{"type":"object","properties":{"name":{"type":"string","title":"Name of the computed attribute","uniqueKey":"schema.entityDefinitions.additionalProperties.permissions.additionalProperties.child.leaf.call.arguments.items.[INDEX].computedAttribute.name","typeLabel":"string"}},"description":"ComputedAttribute defines a computed attribute which includes its name.","uniqueKey":"schema.entityDefinitions.additionalProperties.permissions.additionalProperties.child.leaf.call.arguments.items.[INDEX].computedAttribute","typeLabel":"object"}},"description":"Argument defines the type of argument in a Call. It can be either a ComputedAttribute or a ContextAttribute.","uniqueKey":"schema.entityDefinitions.additionalProperties.permissions.additionalProperties.child.leaf.call.arguments.items.[INDEX]","typeLabel":"object"},"title":"Arguments passed to the rule","uniqueKey":"schema.entityDefinitions.additionalProperties.permissions.additionalProperties.child.leaf.call.arguments","typeLabel":"Arguments passed to the rule · object[]"}},"description":"Call represents a call to a rule. It includes the name of the rule and the arguments passed to it.","uniqueKey":"schema.entityDefinitions.additionalProperties.permissions.additionalProperties.child.leaf.call","typeLabel":"object"}},"description":"Leaf represents a leaf node in the permission tree.","uniqueKey":"schema.entityDefinitions.additionalProperties.permissions.additionalProperties.child.leaf","typeLabel":"object"},"rewrite":{"type":"object","properties":{"rewriteOperation":{"type":"string","enum":["OPERATION_UNSPECIFIED","OPERATION_UNION","OPERATION_INTERSECTION","OPERATION_EXCLUSION"],"default":"OPERATION_UNSPECIFIED","description":"Operation enum includes potential rewrite operations.\nOPERATION_UNION: Represents a union operation.\nOPERATION_INTERSECTION: Represents an intersection operation.\nOPERATION_EXCLUSION: Represents an exclusion operation.\n\n - OPERATION_UNSPECIFIED: Default, unspecified operation.\n - OPERATION_UNION: Represents a union operation.\n - OPERATION_INTERSECTION: Represents an intersection operation.\n - OPERATION_EXCLUSION: Represents an exclusion operation.","uniqueKey":"schema.entityDefinitions.additionalProperties.permissions.additionalProperties.child.rewrite.rewriteOperation","typeLabel":"enum\u003cstring>"},"children":{"type":"array","items":{"$circularRef":"6a4440d1-bdf7-468d-b92c-7c7469dce655"},"description":"A list of children that are operated upon by the rewrite operation.","uniqueKey":"schema.entityDefinitions.additionalProperties.permissions.additionalProperties.child.rewrite.children","typeLabel":"array"}},"description":"The Rewrite message represents a specific rewrite operation.\nThis operation could be one of the following: union, intersection, or exclusion.","uniqueKey":"schema.entityDefinitions.additionalProperties.permissions.additionalProperties.child.rewrite","typeLabel":"object"}},"description":"Child represents a node in the permission tree.","uniqueKey":"schema.entityDefinitions.additionalProperties.permissions.additionalProperties.child","typeLabel":"object"}},"description":"The PermissionDefinition message provides detailed information about a specific permission.","uniqueKey":"schema.entityDefinitions.additionalProperties.permissions.additionalProperties","typeLabel":"object"},"description":"Map of permission definitions within this entity. The key is the permission name, and the value is the PermissionDefinition.","uniqueKey":"schema.entityDefinitions.additionalProperties.permissions","typeLabel":"object"},"attributes":{"type":"object","additionalProperties":{"type":"object","properties":{"name":{"type":"string","description":"The name of the attribute, which follows a specific string pattern and has a maximum byte size.","uniqueKey":"schema.entityDefinitions.additionalProperties.attributes.additionalProperties.name","typeLabel":"string"},"type":{"type":"string","enum":["ATTRIBUTE_TYPE_UNSPECIFIED","ATTRIBUTE_TYPE_BOOLEAN","ATTRIBUTE_TYPE_BOOLEAN_ARRAY","ATTRIBUTE_TYPE_STRING","ATTRIBUTE_TYPE_STRING_ARRAY","ATTRIBUTE_TYPE_INTEGER","ATTRIBUTE_TYPE_INTEGER_ARRAY","ATTRIBUTE_TYPE_DOUBLE","ATTRIBUTE_TYPE_DOUBLE_ARRAY"],"default":"ATTRIBUTE_TYPE_UNSPECIFIED","description":"Enumerates the types of attribute.\n\n - ATTRIBUTE_TYPE_UNSPECIFIED: Not specified attribute type. This is the default value.\n - ATTRIBUTE_TYPE_BOOLEAN: A boolean attribute type.\n - ATTRIBUTE_TYPE_BOOLEAN_ARRAY: A boolean array attribute type.\n - ATTRIBUTE_TYPE_STRING: A string attribute type.\n - ATTRIBUTE_TYPE_STRING_ARRAY: A string array attribute type.\n - ATTRIBUTE_TYPE_INTEGER: An integer attribute type.\n - ATTRIBUTE_TYPE_INTEGER_ARRAY: An integer array attribute type.\n - ATTRIBUTE_TYPE_DOUBLE: A double attribute type.\n - ATTRIBUTE_TYPE_DOUBLE_ARRAY: A double array attribute type.","uniqueKey":"schema.entityDefinitions.additionalProperties.attributes.additionalProperties.type","typeLabel":"enum\u003cstring>"}},"description":"The AttributeDefinition message provides detailed information about a specific attribute.","uniqueKey":"schema.entityDefinitions.additionalProperties.attributes.additionalProperties","typeLabel":"object"},"description":"Map of attribute definitions within this entity. The key is the attribute name, and the value is the AttributeDefinition.","uniqueKey":"schema.entityDefinitions.additionalProperties.attributes","typeLabel":"object"},"references":{"type":"object","additionalProperties":{"type":"string","enum":["REFERENCE_UNSPECIFIED","REFERENCE_RELATION","REFERENCE_PERMISSION","REFERENCE_ATTRIBUTE"],"default":"REFERENCE_UNSPECIFIED","description":"The Reference enum specifies whether a name pertains to a relation, permission, or attribute.\n\n - REFERENCE_UNSPECIFIED: Default, unspecified reference.\n - REFERENCE_RELATION: Indicates that the name refers to a relation.\n - REFERENCE_PERMISSION: Indicates that the name refers to a permission.\n - REFERENCE_ATTRIBUTE: Indicates that the name refers to an attribute.","uniqueKey":"schema.entityDefinitions.additionalProperties.references.additionalProperties","typeLabel":"enum\u003cstring>"},"description":"Map of references indicating whether a string pertains to a relation, permission, or attribute.","uniqueKey":"schema.entityDefinitions.additionalProperties.references","typeLabel":"object"}},"description":"The EntityDefinition message provides detailed information about a specific entity.","uniqueKey":"schema.entityDefinitions.additionalProperties","typeLabel":"object"},"description":"Map of entity definitions. The key is the entity name, and the value is the corresponding EntityDefinition.","uniqueKey":"schema.entityDefinitions","typeLabel":"object"},"ruleDefinitions":{"type":"object","additionalProperties":{"type":"object","properties":{"name":{"type":"string","description":"The name of the rule, which follows a specific string pattern and has a maximum byte size.","uniqueKey":"schema.ruleDefinitions.additionalProperties.name","typeLabel":"string"},"arguments":{"type":"object","additionalProperties":{"type":"string","enum":["ATTRIBUTE_TYPE_UNSPECIFIED","ATTRIBUTE_TYPE_BOOLEAN","ATTRIBUTE_TYPE_BOOLEAN_ARRAY","ATTRIBUTE_TYPE_STRING","ATTRIBUTE_TYPE_STRING_ARRAY","ATTRIBUTE_TYPE_INTEGER","ATTRIBUTE_TYPE_INTEGER_ARRAY","ATTRIBUTE_TYPE_DOUBLE","ATTRIBUTE_TYPE_DOUBLE_ARRAY"],"default":"ATTRIBUTE_TYPE_UNSPECIFIED","description":"Enumerates the types of attribute.\n\n - ATTRIBUTE_TYPE_UNSPECIFIED: Not specified attribute type. This is the default value.\n - ATTRIBUTE_TYPE_BOOLEAN: A boolean attribute type.\n - ATTRIBUTE_TYPE_BOOLEAN_ARRAY: A boolean array attribute type.\n - ATTRIBUTE_TYPE_STRING: A string attribute type.\n - ATTRIBUTE_TYPE_STRING_ARRAY: A string array attribute type.\n - ATTRIBUTE_TYPE_INTEGER: An integer attribute type.\n - ATTRIBUTE_TYPE_INTEGER_ARRAY: An integer array attribute type.\n - ATTRIBUTE_TYPE_DOUBLE: A double attribute type.\n - ATTRIBUTE_TYPE_DOUBLE_ARRAY: A double array attribute type.","uniqueKey":"schema.ruleDefinitions.additionalProperties.arguments.additionalProperties","typeLabel":"enum\u003cstring>"},"description":"Map of arguments for this rule. The key is the attribute name, and the value is the AttributeType.","uniqueKey":"schema.ruleDefinitions.additionalProperties.arguments","typeLabel":"object"},"expression":{"type":"object","properties":{"referenceMap":{"type":"object","additionalProperties":{"type":"object","properties":{"name":{"type":"string","description":"The fully qualified name of the declaration.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.referenceMap.additionalProperties.name","typeLabel":"string"},"overloadId":{"type":"array","items":{"type":"string","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.referenceMap.additionalProperties.overloadId.items.[INDEX]","typeLabel":"string"},"description":"For references to functions, this is a list of `Overload.overload_id`\nvalues which match according to typing rules.\n\nIf the list has more than one element, overload resolution among the\npresented candidates must happen at runtime because of dynamic types. The\ntype checker attempts to narrow down this list as much as possible.\n\nEmpty if this is not a reference to a\n[Decl.FunctionDecl][google.api.expr.v1alpha1.Decl.FunctionDecl].","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.referenceMap.additionalProperties.overloadId","typeLabel":"string[]"},"value":{"type":"object","properties":{"nullValue":{"type":"string","description":"null value.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.referenceMap.additionalProperties.value.nullValue","typeLabel":"string"},"boolValue":{"type":"boolean","description":"boolean value.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.referenceMap.additionalProperties.value.boolValue","typeLabel":"boolean"},"int64Value":{"type":"string","format":"int64","description":"int64 value.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.referenceMap.additionalProperties.value.int64Value","typeLabel":"string\u003cint64>"},"uint64Value":{"type":"string","format":"uint64","description":"uint64 value.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.referenceMap.additionalProperties.value.uint64Value","typeLabel":"string\u003cuint64>"},"doubleValue":{"type":"number","format":"double","description":"double value.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.referenceMap.additionalProperties.value.doubleValue","typeLabel":"number\u003cdouble>"},"stringValue":{"type":"string","description":"string value.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.referenceMap.additionalProperties.value.stringValue","typeLabel":"string"},"bytesValue":{"type":"string","format":"byte","description":"bytes value.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.referenceMap.additionalProperties.value.bytesValue","typeLabel":"string\u003cbyte>"},"durationValue":{"type":"string","description":"protobuf.Duration value.\n\nDeprecated: duration is no longer considered a builtin cel type.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.referenceMap.additionalProperties.value.durationValue","typeLabel":"string"},"timestampValue":{"type":"string","format":"date-time","description":"protobuf.Timestamp value.\n\nDeprecated: timestamp is no longer considered a builtin cel type.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.referenceMap.additionalProperties.value.timestampValue","typeLabel":"string\u003cdate-time>"}},"description":"Represents a primitive literal.\n\nNamed 'Constant' here for backwards compatibility.\n\nThis is similar as the primitives supported in the well-known type\n`google.protobuf.Value`, but richer so it can represent CEL's full range of\nprimitives.\n\nLists and structs are not included as constants as these aggregate types may\ncontain [Expr][google.api.expr.v1alpha1.Expr] elements which require\nevaluation and are thus not constant.\n\nExamples of literals include: `\"hello\"`, `b'bytes'`, `1u`, `4.2`, `-2`,\n`true`, `null`.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.referenceMap.additionalProperties.value","typeLabel":"object"}},"description":"Describes a resolved reference to a declaration.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.referenceMap.additionalProperties","typeLabel":"object"},"description":"A map from expression ids to resolved references.\n\nThe following entries are in this table:\n\n- An Ident or Select expression is represented here if it resolves to a\n declaration. For instance, if `a.b.c` is represented by\n `select(select(id(a), b), c)`, and `a.b` resolves to a declaration,\n while `c` is a field selection, then the reference is attached to the\n nested select expression (but not to the id or or the outer select).\n In turn, if `a` resolves to a declaration and `b.c` are field selections,\n the reference is attached to the ident expression.\n- Every Call expression has an entry here, identifying the function being\n called.\n- Every CreateStruct expression for a message has an entry, identifying\n the message.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.referenceMap","typeLabel":"object"},"typeMap":{"type":"object","additionalProperties":{"type":"object","properties":{"dyn":{"type":"object","properties":{},"description":"Dynamic type.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.typeMap.additionalProperties.dyn","typeLabel":"object"},"null":{"type":"string","description":"Null value.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.typeMap.additionalProperties.null","typeLabel":"string"},"primitive":{"type":"string","enum":["PRIMITIVE_TYPE_UNSPECIFIED","BOOL","INT64","UINT64","DOUBLE","STRING","BYTES"],"default":"PRIMITIVE_TYPE_UNSPECIFIED","description":"CEL primitive types.\n\n - PRIMITIVE_TYPE_UNSPECIFIED: Unspecified type.\n - BOOL: Boolean type.\n - INT64: Int64 type.\n\nProto-based integer values are widened to int64.\n - UINT64: Uint64 type.\n\nProto-based unsigned integer values are widened to uint64.\n - DOUBLE: Double type.\n\nProto-based float values are widened to double values.\n - STRING: String type.\n - BYTES: Bytes type.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.typeMap.additionalProperties.primitive","typeLabel":"enum\u003cstring>"},"wrapper":{"type":"string","enum":["PRIMITIVE_TYPE_UNSPECIFIED","BOOL","INT64","UINT64","DOUBLE","STRING","BYTES"],"default":"PRIMITIVE_TYPE_UNSPECIFIED","description":"CEL primitive types.\n\n - PRIMITIVE_TYPE_UNSPECIFIED: Unspecified type.\n - BOOL: Boolean type.\n - INT64: Int64 type.\n\nProto-based integer values are widened to int64.\n - UINT64: Uint64 type.\n\nProto-based unsigned integer values are widened to uint64.\n - DOUBLE: Double type.\n\nProto-based float values are widened to double values.\n - STRING: String type.\n - BYTES: Bytes type.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.typeMap.additionalProperties.wrapper","typeLabel":"enum\u003cstring>"},"wellKnown":{"type":"string","enum":["WELL_KNOWN_TYPE_UNSPECIFIED","ANY","TIMESTAMP","DURATION"],"default":"WELL_KNOWN_TYPE_UNSPECIFIED","description":"Well-known protobuf types treated with first-class support in CEL.\n\n - WELL_KNOWN_TYPE_UNSPECIFIED: Unspecified type.\n - ANY: Well-known protobuf.Any type.\n\nAny types are a polymorphic message type. During type-checking they are\ntreated like `DYN` types, but at runtime they are resolved to a specific\nmessage type specified at evaluation time.\n - TIMESTAMP: Well-known protobuf.Timestamp type, internally referenced as `timestamp`.\n - DURATION: Well-known protobuf.Duration type, internally referenced as `duration`.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.typeMap.additionalProperties.wellKnown","typeLabel":"enum\u003cstring>"},"listType":{"type":"object","properties":{"elemType":{"oneOf":[{"$circularRef":"281308b5-7a31-404b-9a03-80ee311948ad"}],"uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.typeMap.additionalProperties.listType.elemType","typeLabel":"any"}},"description":"List type with typed elements, e.g. `list\u003cexample.proto.MyMessage>`.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.typeMap.additionalProperties.listType","typeLabel":"object"},"mapType":{"type":"object","properties":{"keyType":{"oneOf":[{"$circularRef":"281308b5-7a31-404b-9a03-80ee311948ad"}],"uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.typeMap.additionalProperties.mapType.keyType","typeLabel":"any"},"valueType":{"oneOf":[{"$circularRef":"281308b5-7a31-404b-9a03-80ee311948ad"}],"uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.typeMap.additionalProperties.mapType.valueType","typeLabel":"any"}},"description":"Map type with parameterized key and value types, e.g. `map\u003cstring, int>`.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.typeMap.additionalProperties.mapType","typeLabel":"object"},"function":{"type":"object","properties":{"resultType":{"oneOf":[{"$circularRef":"281308b5-7a31-404b-9a03-80ee311948ad"}],"uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.typeMap.additionalProperties.function.resultType","typeLabel":"any"},"argTypes":{"type":"array","items":{"$circularRef":"281308b5-7a31-404b-9a03-80ee311948ad"},"description":"Argument types of the function.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.typeMap.additionalProperties.function.argTypes","typeLabel":"array"}},"description":"Function type with result and arg types.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.typeMap.additionalProperties.function","typeLabel":"object"},"messageType":{"type":"string","description":"Protocol buffer message type.\n\nThe `message_type` string specifies the qualified message type name. For\nexample, `google.plus.Profile`.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.typeMap.additionalProperties.messageType","typeLabel":"string"},"typeParam":{"type":"string","description":"Type param type.\n\nThe `type_param` string specifies the type parameter name, e.g. `list\u003cE>`\nwould be a `list_type` whose element type was a `type_param` type\nnamed `E`.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.typeMap.additionalProperties.typeParam","typeLabel":"string"},"type":{"oneOf":[{"$circularRef":"281308b5-7a31-404b-9a03-80ee311948ad"}],"uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.typeMap.additionalProperties.type","typeLabel":"any"},"error":{"type":"object","properties":{},"description":"Error type.\n\nDuring type-checking if an expression is an error, its type is propagated\nas the `ERROR` type. This permits the type-checker to discover other\nerrors present in the expression.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.typeMap.additionalProperties.error","typeLabel":"object"},"abstractType":{"type":"object","properties":{"name":{"type":"string","description":"The fully qualified name of this abstract type.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.typeMap.additionalProperties.abstractType.name","typeLabel":"string"},"parameterTypes":{"type":"array","items":{"$circularRef":"281308b5-7a31-404b-9a03-80ee311948ad"},"description":"Parameter types for this abstract type.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.typeMap.additionalProperties.abstractType.parameterTypes","typeLabel":"array"}},"description":"Application defined abstract type.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.typeMap.additionalProperties.abstractType","typeLabel":"object"}},"description":"Represents a CEL type.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.typeMap.additionalProperties","typeLabel":"object"},"description":"A map from expression ids to types.\n\nEvery expression node which has a type different than DYN has a mapping\nhere. If an expression has type DYN, it is omitted from this map to save\nspace.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.typeMap","typeLabel":"object"},"sourceInfo":{"type":"object","properties":{"syntaxVersion":{"type":"string","description":"The syntax version of the source, e.g. `cel1`.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.syntaxVersion","typeLabel":"string"},"location":{"type":"string","description":"The location name. All position information attached to an expression is\nrelative to this location.\n\nThe location could be a file, UI element, or similar. For example,\n`acme/app/AnvilPolicy.cel`.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.location","typeLabel":"string"},"lineOffsets":{"type":"array","items":{"type":"integer","format":"int32","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.lineOffsets.items.[INDEX]","typeLabel":"integer\u003cint32>"},"description":"Monotonically increasing list of code point offsets where newlines\n`\\n` appear.\n\nThe line number of a given position is the index `i` where for a given\n`id` the `line_offsets[i] \u003c id_positions[id] \u003c line_offsets[i+1]`. The\ncolumn may be derivd from `id_positions[id] - line_offsets[i]`.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.lineOffsets","typeLabel":"integer\u003cint32>[]"},"positions":{"type":"object","additionalProperties":{"type":"integer","format":"int32","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.positions.additionalProperties","typeLabel":"integer\u003cint32>"},"description":"A map from the parse node id (e.g. `Expr.id`) to the code point offset\nwithin the source.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.positions","typeLabel":"object"},"macroCalls":{"type":"object","additionalProperties":{"type":"object","properties":{"id":{"type":"string","format":"int64","description":"Required. An id assigned to this node by the parser which is unique in a\ngiven expression tree. This is used to associate type information and other\nattributes to a node in the parse tree.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.id","typeLabel":"string\u003cint64>"},"constExpr":{"type":"object","properties":{"nullValue":{"type":"string","description":"null value.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.constExpr.nullValue","typeLabel":"string"},"boolValue":{"type":"boolean","description":"boolean value.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.constExpr.boolValue","typeLabel":"boolean"},"int64Value":{"type":"string","format":"int64","description":"int64 value.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.constExpr.int64Value","typeLabel":"string\u003cint64>"},"uint64Value":{"type":"string","format":"uint64","description":"uint64 value.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.constExpr.uint64Value","typeLabel":"string\u003cuint64>"},"doubleValue":{"type":"number","format":"double","description":"double value.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.constExpr.doubleValue","typeLabel":"number\u003cdouble>"},"stringValue":{"type":"string","description":"string value.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.constExpr.stringValue","typeLabel":"string"},"bytesValue":{"type":"string","format":"byte","description":"bytes value.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.constExpr.bytesValue","typeLabel":"string\u003cbyte>"},"durationValue":{"type":"string","description":"protobuf.Duration value.\n\nDeprecated: duration is no longer considered a builtin cel type.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.constExpr.durationValue","typeLabel":"string"},"timestampValue":{"type":"string","format":"date-time","description":"protobuf.Timestamp value.\n\nDeprecated: timestamp is no longer considered a builtin cel type.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.constExpr.timestampValue","typeLabel":"string\u003cdate-time>"}},"description":"Represents a primitive literal.\n\nNamed 'Constant' here for backwards compatibility.\n\nThis is similar as the primitives supported in the well-known type\n`google.protobuf.Value`, but richer so it can represent CEL's full range of\nprimitives.\n\nLists and structs are not included as constants as these aggregate types may\ncontain [Expr][google.api.expr.v1alpha1.Expr] elements which require\nevaluation and are thus not constant.\n\nExamples of literals include: `\"hello\"`, `b'bytes'`, `1u`, `4.2`, `-2`,\n`true`, `null`.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.constExpr","typeLabel":"object"},"identExpr":{"type":"object","properties":{"name":{"type":"string","description":"Required. Holds a single, unqualified identifier, possibly preceded by a\n'.'.\n\nQualified names are represented by the\n[Expr.Select][google.api.expr.v1alpha1.Expr.Select] expression.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.identExpr.name","typeLabel":"string"}},"description":"An identifier expression. e.g. `request`.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.identExpr","typeLabel":"object"},"selectExpr":{"type":"object","properties":{"operand":{"oneOf":[{"$circularRef":"6e218c32-9eb8-45d8-89a7-ebf9b972008f"}],"uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.selectExpr.operand","typeLabel":"any"},"field":{"type":"string","description":"Required. The name of the field to select.\n\nFor example, in the select expression `request.auth`, the `auth` portion\nof the expression would be the `field`.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.selectExpr.field","typeLabel":"string"},"testOnly":{"type":"boolean","description":"Whether the select is to be interpreted as a field presence test.\n\nThis results from the macro `has(request.auth)`.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.selectExpr.testOnly","typeLabel":"boolean"}},"description":"A field selection expression. e.g. `request.auth`.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.selectExpr","typeLabel":"object"},"callExpr":{"type":"object","properties":{"target":{"oneOf":[{"$circularRef":"6e218c32-9eb8-45d8-89a7-ebf9b972008f"}],"uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.callExpr.target","typeLabel":"any"},"function":{"type":"string","description":"Required. The name of the function or method being called.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.callExpr.function","typeLabel":"string"},"args":{"type":"array","items":{"$circularRef":"6e218c32-9eb8-45d8-89a7-ebf9b972008f"},"description":"The arguments.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.callExpr.args","typeLabel":"array"}},"description":"A call expression, including calls to predefined functions and operators.\n\nFor example, `value == 10`, `size(map_value)`.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.callExpr","typeLabel":"object"},"listExpr":{"type":"object","properties":{"elements":{"type":"array","items":{"$circularRef":"6e218c32-9eb8-45d8-89a7-ebf9b972008f"},"description":"The elements part of the list.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.listExpr.elements","typeLabel":"array"},"optionalIndices":{"type":"array","items":{"type":"integer","format":"int32","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.listExpr.optionalIndices.items.[INDEX]","typeLabel":"integer\u003cint32>"},"description":"The indices within the elements list which are marked as optional\nelements.\n\nWhen an optional-typed value is present, the value it contains\nis included in the list. If the optional-typed value is absent, the list\nelement is omitted from the CreateList result.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.listExpr.optionalIndices","typeLabel":"integer\u003cint32>[]"}},"description":"A list creation expression.\n\nLists may either be homogenous, e.g. `[1, 2, 3]`, or heterogeneous, e.g.\n`dyn([1, 'hello', 2.0])`","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.listExpr","typeLabel":"object"},"structExpr":{"type":"object","properties":{"messageName":{"type":"string","description":"The type name of the message to be created, empty when creating map\nliterals.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.structExpr.messageName","typeLabel":"string"},"entries":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"int64","description":"Required. An id assigned to this node by the parser which is unique\nin a given expression tree. This is used to associate type\ninformation and other attributes to the node.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.structExpr.entries.items.[INDEX].id","typeLabel":"string\u003cint64>"},"fieldKey":{"type":"string","description":"The field key for a message creator statement.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.structExpr.entries.items.[INDEX].fieldKey","typeLabel":"string"},"mapKey":{"oneOf":[{"$circularRef":"6e218c32-9eb8-45d8-89a7-ebf9b972008f"}],"uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.structExpr.entries.items.[INDEX].mapKey","typeLabel":"any"},"value":{"oneOf":[{"$circularRef":"6e218c32-9eb8-45d8-89a7-ebf9b972008f"}],"uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.structExpr.entries.items.[INDEX].value","typeLabel":"any"},"optionalEntry":{"type":"boolean","description":"Whether the key-value pair is optional.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.structExpr.entries.items.[INDEX].optionalEntry","typeLabel":"boolean"}},"description":"Represents an entry.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.structExpr.entries.items.[INDEX]","typeLabel":"object"},"description":"The entries in the creation expression.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.structExpr.entries","typeLabel":"object[]"}},"description":"A map or message creation expression.\n\nMaps are constructed as `{'key_name': 'value'}`. Message construction is\nsimilar, but prefixed with a type name and composed of field ids:\n`types.MyType{field_id: 'value'}`.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.structExpr","typeLabel":"object"},"comprehensionExpr":{"type":"object","properties":{"iterVar":{"type":"string","description":"The name of the first iteration variable.\nWhen the iter_range is a list, this variable is the list element.\nWhen the iter_range is a map, this variable is the map entry key.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.comprehensionExpr.iterVar","typeLabel":"string"},"iterVar2":{"type":"string","description":"The name of the second iteration variable, empty if not set.\nWhen the iter_range is a list, this variable is the integer index.\nWhen the iter_range is a map, this variable is the map entry value.\nThis field is only set for comprehension v2 macros.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.comprehensionExpr.iterVar2","typeLabel":"string"},"iterRange":{"oneOf":[{"$circularRef":"6e218c32-9eb8-45d8-89a7-ebf9b972008f"}],"uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.comprehensionExpr.iterRange","typeLabel":"any"},"accuVar":{"type":"string","description":"The name of the variable used for accumulation of the result.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.comprehensionExpr.accuVar","typeLabel":"string"},"accuInit":{"oneOf":[{"$circularRef":"6e218c32-9eb8-45d8-89a7-ebf9b972008f"}],"uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.comprehensionExpr.accuInit","typeLabel":"any"},"loopCondition":{"oneOf":[{"$circularRef":"6e218c32-9eb8-45d8-89a7-ebf9b972008f"}],"uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.comprehensionExpr.loopCondition","typeLabel":"any"},"loopStep":{"oneOf":[{"$circularRef":"6e218c32-9eb8-45d8-89a7-ebf9b972008f"}],"uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.comprehensionExpr.loopStep","typeLabel":"any"},"result":{"oneOf":[{"$circularRef":"6e218c32-9eb8-45d8-89a7-ebf9b972008f"}],"uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.comprehensionExpr.result","typeLabel":"any"}},"description":"A comprehension expression applied to a list or map.\n\nComprehensions are not part of the core syntax, but enabled with macros.\nA macro matches a specific call signature within a parsed AST and replaces\nthe call with an alternate AST block. Macro expansion happens at parse\ntime.\n\nThe following macros are supported within CEL:\n\nAggregate type macros may be applied to all elements in a list or all keys\nin a map:\n\n* `all`, `exists`, `exists_one` - test a predicate expression against\n the inputs and return `true` if the predicate is satisfied for all,\n any, or only one value `list.all(x, x \u003c 10)`.\n* `filter` - test a predicate expression against the inputs and return\n the subset of elements which satisfy the predicate:\n `payments.filter(p, p > 1000)`.\n* `map` - apply an expression to all elements in the input and return the\n output aggregate type: `[1, 2, 3].map(i, i * i)`.\n\nThe `has(m.x)` macro tests whether the property `x` is present in struct\n`m`. The semantics of this macro depend on the type of `m`. For proto2\nmessages `has(m.x)` is defined as 'defined, but not set`. For proto3, the\nmacro tests whether the property is set to its default. For map and struct\ntypes, the macro tests whether the property `x` is defined on `m`.\n\nComprehensions for the standard environment macros evaluation can be best\nvisualized as the following pseudocode:\n\n```\nlet `accu_var` = `accu_init`\nfor (let `iter_var` in `iter_range`) {\n if (!`loop_condition`) {\n break\n }\n `accu_var` = `loop_step`\n}\nreturn `result`\n```\n\nComprehensions for the optional V2 macros which support map-to-map\ntranslation differ slightly from the standard environment macros in that\nthey expose both the key or index in addition to the value for each list\nor map entry:\n\n```\nlet `accu_var` = `accu_init`\nfor (let `iter_var`, `iter_var2` in `iter_range`) {\n if (!`loop_condition`) {\n break\n }\n `accu_var` = `loop_step`\n}\nreturn `result`\n```","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties.comprehensionExpr","typeLabel":"object"}},"description":"An abstract representation of a common expression.\n\nExpressions are abstractly represented as a collection of identifiers,\nselect statements, function calls, literals, and comprehensions. All\noperators with the exception of the '.' operator are modelled as function\ncalls. This makes it easy to represent new operators into the existing AST.\n\nAll references within expressions must resolve to a\n[Decl][google.api.expr.v1alpha1.Decl] provided at type-check for an\nexpression to be valid. A reference may either be a bare identifier `name` or\na qualified identifier `google.api.name`. References may either refer to a\nvalue or a function declaration.\n\nFor example, the expression `google.api.name.startsWith('expr')` references\nthe declaration `google.api.name` within a\n[Expr.Select][google.api.expr.v1alpha1.Expr.Select] expression, and the\nfunction declaration `startsWith`.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls.additionalProperties","typeLabel":"object"},"description":"A map from the parse node id where a macro replacement was made to the\ncall `Expr` that resulted in a macro expansion.\n\nFor example, `has(value.field)` is a function call that is replaced by a\n`test_only` field selection in the AST. Likewise, the call\n`list.exists(e, e > 10)` translates to a comprehension expression. The key\nin the map corresponds to the expression id of the expanded macro, and the\nvalue is the call `Expr` that was replaced.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.macroCalls","typeLabel":"object"},"extensions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","title":"Identifier for the extension. Example: constant_folding","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.extensions.items.[INDEX].id","typeLabel":"string"},"affectedComponents":{"type":"array","items":{"type":"string","enum":["COMPONENT_UNSPECIFIED","COMPONENT_PARSER","COMPONENT_TYPE_CHECKER","COMPONENT_RUNTIME"],"default":"COMPONENT_UNSPECIFIED","description":"CEL component specifier.\n\n - COMPONENT_UNSPECIFIED: Unspecified, default.\n - COMPONENT_PARSER: Parser. Converts a CEL string to an AST.\n - COMPONENT_TYPE_CHECKER: Type checker. Checks that references in an AST are defined and types\nagree.\n - COMPONENT_RUNTIME: Runtime. Evaluates a parsed and optionally checked CEL AST against a\ncontext.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.extensions.items.[INDEX].affectedComponents.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"If set, the listed components must understand the extension for the\nexpression to evaluate correctly.\n\nThis field has set semantics, repeated values should be deduplicated.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.extensions.items.[INDEX].affectedComponents","typeLabel":"enum\u003cstring>[]"},"version":{"type":"object","properties":{"major":{"type":"string","format":"int64","description":"Major version changes indicate different required support level from\nthe required components.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.extensions.items.[INDEX].version.major","typeLabel":"string\u003cint64>"},"minor":{"type":"string","format":"int64","description":"Minor version changes must not change the observed behavior from\nexisting implementations, but may be provided informationally.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.extensions.items.[INDEX].version.minor","typeLabel":"string\u003cint64>"}},"title":"Version","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.extensions.items.[INDEX].version","typeLabel":"Version · object"}},"description":"An extension that was requested for the source expression.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.extensions.items.[INDEX]","typeLabel":"object"},"description":"A list of tags for extensions that were used while parsing or type checking\nthe source expression. For example, optimizations that require special\nruntime support may be specified.\n\nThese are used to check feature support between components in separate\nimplementations. This can be used to either skip redundant work or\nreport an error if the extension is unsupported.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo.extensions","typeLabel":"object[]"}},"description":"Source information collected at parse time.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.sourceInfo","typeLabel":"object"},"exprVersion":{"type":"string","description":"The expr version indicates the major / minor version number of the `expr`\nrepresentation.\n\nThe most common reason for a version change will be to indicate to the CEL\nruntimes that transformations have been performed on the expr during static\nanalysis. In some cases, this will save the runtime the work of applying\nthe same or similar transformations prior to evaluation.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.exprVersion","typeLabel":"string"},"expr":{"type":"object","properties":{"id":{"type":"string","format":"int64","description":"Required. An id assigned to this node by the parser which is unique in a\ngiven expression tree. This is used to associate type information and other\nattributes to a node in the parse tree.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.id","typeLabel":"string\u003cint64>"},"constExpr":{"type":"object","properties":{"nullValue":{"type":"string","description":"null value.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.constExpr.nullValue","typeLabel":"string"},"boolValue":{"type":"boolean","description":"boolean value.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.constExpr.boolValue","typeLabel":"boolean"},"int64Value":{"type":"string","format":"int64","description":"int64 value.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.constExpr.int64Value","typeLabel":"string\u003cint64>"},"uint64Value":{"type":"string","format":"uint64","description":"uint64 value.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.constExpr.uint64Value","typeLabel":"string\u003cuint64>"},"doubleValue":{"type":"number","format":"double","description":"double value.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.constExpr.doubleValue","typeLabel":"number\u003cdouble>"},"stringValue":{"type":"string","description":"string value.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.constExpr.stringValue","typeLabel":"string"},"bytesValue":{"type":"string","format":"byte","description":"bytes value.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.constExpr.bytesValue","typeLabel":"string\u003cbyte>"},"durationValue":{"type":"string","description":"protobuf.Duration value.\n\nDeprecated: duration is no longer considered a builtin cel type.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.constExpr.durationValue","typeLabel":"string"},"timestampValue":{"type":"string","format":"date-time","description":"protobuf.Timestamp value.\n\nDeprecated: timestamp is no longer considered a builtin cel type.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.constExpr.timestampValue","typeLabel":"string\u003cdate-time>"}},"description":"Represents a primitive literal.\n\nNamed 'Constant' here for backwards compatibility.\n\nThis is similar as the primitives supported in the well-known type\n`google.protobuf.Value`, but richer so it can represent CEL's full range of\nprimitives.\n\nLists and structs are not included as constants as these aggregate types may\ncontain [Expr][google.api.expr.v1alpha1.Expr] elements which require\nevaluation and are thus not constant.\n\nExamples of literals include: `\"hello\"`, `b'bytes'`, `1u`, `4.2`, `-2`,\n`true`, `null`.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.constExpr","typeLabel":"object"},"identExpr":{"type":"object","properties":{"name":{"type":"string","description":"Required. Holds a single, unqualified identifier, possibly preceded by a\n'.'.\n\nQualified names are represented by the\n[Expr.Select][google.api.expr.v1alpha1.Expr.Select] expression.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.identExpr.name","typeLabel":"string"}},"description":"An identifier expression. e.g. `request`.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.identExpr","typeLabel":"object"},"selectExpr":{"type":"object","properties":{"operand":{"oneOf":[{"$circularRef":"6e218c32-9eb8-45d8-89a7-ebf9b972008f"}],"uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.selectExpr.operand","typeLabel":"any"},"field":{"type":"string","description":"Required. The name of the field to select.\n\nFor example, in the select expression `request.auth`, the `auth` portion\nof the expression would be the `field`.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.selectExpr.field","typeLabel":"string"},"testOnly":{"type":"boolean","description":"Whether the select is to be interpreted as a field presence test.\n\nThis results from the macro `has(request.auth)`.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.selectExpr.testOnly","typeLabel":"boolean"}},"description":"A field selection expression. e.g. `request.auth`.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.selectExpr","typeLabel":"object"},"callExpr":{"type":"object","properties":{"target":{"oneOf":[{"$circularRef":"6e218c32-9eb8-45d8-89a7-ebf9b972008f"}],"uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.callExpr.target","typeLabel":"any"},"function":{"type":"string","description":"Required. The name of the function or method being called.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.callExpr.function","typeLabel":"string"},"args":{"type":"array","items":{"$circularRef":"6e218c32-9eb8-45d8-89a7-ebf9b972008f"},"description":"The arguments.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.callExpr.args","typeLabel":"array"}},"description":"A call expression, including calls to predefined functions and operators.\n\nFor example, `value == 10`, `size(map_value)`.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.callExpr","typeLabel":"object"},"listExpr":{"type":"object","properties":{"elements":{"type":"array","items":{"$circularRef":"6e218c32-9eb8-45d8-89a7-ebf9b972008f"},"description":"The elements part of the list.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.listExpr.elements","typeLabel":"array"},"optionalIndices":{"type":"array","items":{"type":"integer","format":"int32","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.listExpr.optionalIndices.items.[INDEX]","typeLabel":"integer\u003cint32>"},"description":"The indices within the elements list which are marked as optional\nelements.\n\nWhen an optional-typed value is present, the value it contains\nis included in the list. If the optional-typed value is absent, the list\nelement is omitted from the CreateList result.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.listExpr.optionalIndices","typeLabel":"integer\u003cint32>[]"}},"description":"A list creation expression.\n\nLists may either be homogenous, e.g. `[1, 2, 3]`, or heterogeneous, e.g.\n`dyn([1, 'hello', 2.0])`","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.listExpr","typeLabel":"object"},"structExpr":{"type":"object","properties":{"messageName":{"type":"string","description":"The type name of the message to be created, empty when creating map\nliterals.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.structExpr.messageName","typeLabel":"string"},"entries":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"int64","description":"Required. An id assigned to this node by the parser which is unique\nin a given expression tree. This is used to associate type\ninformation and other attributes to the node.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.structExpr.entries.items.[INDEX].id","typeLabel":"string\u003cint64>"},"fieldKey":{"type":"string","description":"The field key for a message creator statement.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.structExpr.entries.items.[INDEX].fieldKey","typeLabel":"string"},"mapKey":{"oneOf":[{"$circularRef":"6e218c32-9eb8-45d8-89a7-ebf9b972008f"}],"uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.structExpr.entries.items.[INDEX].mapKey","typeLabel":"any"},"value":{"oneOf":[{"$circularRef":"6e218c32-9eb8-45d8-89a7-ebf9b972008f"}],"uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.structExpr.entries.items.[INDEX].value","typeLabel":"any"},"optionalEntry":{"type":"boolean","description":"Whether the key-value pair is optional.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.structExpr.entries.items.[INDEX].optionalEntry","typeLabel":"boolean"}},"description":"Represents an entry.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.structExpr.entries.items.[INDEX]","typeLabel":"object"},"description":"The entries in the creation expression.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.structExpr.entries","typeLabel":"object[]"}},"description":"A map or message creation expression.\n\nMaps are constructed as `{'key_name': 'value'}`. Message construction is\nsimilar, but prefixed with a type name and composed of field ids:\n`types.MyType{field_id: 'value'}`.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.structExpr","typeLabel":"object"},"comprehensionExpr":{"type":"object","properties":{"iterVar":{"type":"string","description":"The name of the first iteration variable.\nWhen the iter_range is a list, this variable is the list element.\nWhen the iter_range is a map, this variable is the map entry key.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.comprehensionExpr.iterVar","typeLabel":"string"},"iterVar2":{"type":"string","description":"The name of the second iteration variable, empty if not set.\nWhen the iter_range is a list, this variable is the integer index.\nWhen the iter_range is a map, this variable is the map entry value.\nThis field is only set for comprehension v2 macros.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.comprehensionExpr.iterVar2","typeLabel":"string"},"iterRange":{"oneOf":[{"$circularRef":"6e218c32-9eb8-45d8-89a7-ebf9b972008f"}],"uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.comprehensionExpr.iterRange","typeLabel":"any"},"accuVar":{"type":"string","description":"The name of the variable used for accumulation of the result.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.comprehensionExpr.accuVar","typeLabel":"string"},"accuInit":{"oneOf":[{"$circularRef":"6e218c32-9eb8-45d8-89a7-ebf9b972008f"}],"uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.comprehensionExpr.accuInit","typeLabel":"any"},"loopCondition":{"oneOf":[{"$circularRef":"6e218c32-9eb8-45d8-89a7-ebf9b972008f"}],"uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.comprehensionExpr.loopCondition","typeLabel":"any"},"loopStep":{"oneOf":[{"$circularRef":"6e218c32-9eb8-45d8-89a7-ebf9b972008f"}],"uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.comprehensionExpr.loopStep","typeLabel":"any"},"result":{"oneOf":[{"$circularRef":"6e218c32-9eb8-45d8-89a7-ebf9b972008f"}],"uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.comprehensionExpr.result","typeLabel":"any"}},"description":"A comprehension expression applied to a list or map.\n\nComprehensions are not part of the core syntax, but enabled with macros.\nA macro matches a specific call signature within a parsed AST and replaces\nthe call with an alternate AST block. Macro expansion happens at parse\ntime.\n\nThe following macros are supported within CEL:\n\nAggregate type macros may be applied to all elements in a list or all keys\nin a map:\n\n* `all`, `exists`, `exists_one` - test a predicate expression against\n the inputs and return `true` if the predicate is satisfied for all,\n any, or only one value `list.all(x, x \u003c 10)`.\n* `filter` - test a predicate expression against the inputs and return\n the subset of elements which satisfy the predicate:\n `payments.filter(p, p > 1000)`.\n* `map` - apply an expression to all elements in the input and return the\n output aggregate type: `[1, 2, 3].map(i, i * i)`.\n\nThe `has(m.x)` macro tests whether the property `x` is present in struct\n`m`. The semantics of this macro depend on the type of `m`. For proto2\nmessages `has(m.x)` is defined as 'defined, but not set`. For proto3, the\nmacro tests whether the property is set to its default. For map and struct\ntypes, the macro tests whether the property `x` is defined on `m`.\n\nComprehensions for the standard environment macros evaluation can be best\nvisualized as the following pseudocode:\n\n```\nlet `accu_var` = `accu_init`\nfor (let `iter_var` in `iter_range`) {\n if (!`loop_condition`) {\n break\n }\n `accu_var` = `loop_step`\n}\nreturn `result`\n```\n\nComprehensions for the optional V2 macros which support map-to-map\ntranslation differ slightly from the standard environment macros in that\nthey expose both the key or index in addition to the value for each list\nor map entry:\n\n```\nlet `accu_var` = `accu_init`\nfor (let `iter_var`, `iter_var2` in `iter_range`) {\n if (!`loop_condition`) {\n break\n }\n `accu_var` = `loop_step`\n}\nreturn `result`\n```","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr.comprehensionExpr","typeLabel":"object"}},"description":"An abstract representation of a common expression.\n\nExpressions are abstractly represented as a collection of identifiers,\nselect statements, function calls, literals, and comprehensions. All\noperators with the exception of the '.' operator are modelled as function\ncalls. This makes it easy to represent new operators into the existing AST.\n\nAll references within expressions must resolve to a\n[Decl][google.api.expr.v1alpha1.Decl] provided at type-check for an\nexpression to be valid. A reference may either be a bare identifier `name` or\na qualified identifier `google.api.name`. References may either refer to a\nvalue or a function declaration.\n\nFor example, the expression `google.api.name.startsWith('expr')` references\nthe declaration `google.api.name` within a\n[Expr.Select][google.api.expr.v1alpha1.Expr.Select] expression, and the\nfunction declaration `startsWith`.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression.expr","typeLabel":"object"}},"description":"A CEL expression which has been successfully type checked.","uniqueKey":"schema.ruleDefinitions.additionalProperties.expression","typeLabel":"object"}},"description":"The RuleDefinition message provides detailed information about a specific rule.","uniqueKey":"schema.ruleDefinitions.additionalProperties","typeLabel":"object"},"description":"Map of rule definitions. The key is the rule name, and the value is the corresponding RuleDefinition.","uniqueKey":"schema.ruleDefinitions","typeLabel":"object"},"references":{"type":"object","additionalProperties":{"type":"string","enum":["REFERENCE_UNSPECIFIED","REFERENCE_ENTITY","REFERENCE_RULE"],"default":"REFERENCE_UNSPECIFIED","description":"The Reference enum helps distinguish whether a name corresponds to an entity or a rule.\n\n - REFERENCE_UNSPECIFIED: Default, unspecified reference.\n - REFERENCE_ENTITY: Indicates that the name refers to an entity.\n - REFERENCE_RULE: Indicates that the name refers to a rule.","uniqueKey":"schema.references.additionalProperties","typeLabel":"enum\u003cstring>"},"description":"Map of references to signify whether a string refers to an entity or a rule.","uniqueKey":"schema.references","typeLabel":"object"}},"description":"The SchemaDefinition message provides definitions for entities and rules,\nand includes references to clarify whether a name refers to an entity or a rule.","uniqueKey":"schema","typeLabel":"object"}},"description":"SchemaReadResponse is the response message for the Read method in the Schema service.\nIt returns the requested schema.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"schema":{"entityDefinitions":{},"ruleDefinitions":{},"references":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"ca97e842-8ed3-4897-a532-88a0e7ede01a":{"description":"An unexpected error response.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","format":"int32","uniqueKey":"code","typeLabel":"integer\u003cint32>"},"message":{"type":"string","uniqueKey":"message","typeLabel":"string"},"details":{"type":"array","items":{"type":"object","properties":{"@type":{"type":"string","description":"A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.","uniqueKey":"details.items.[INDEX].@type","typeLabel":"string"}},"additionalProperties":{"oneOf":[{}],"uniqueKey":"details.items.[INDEX].additionalProperties","typeLabel":"any"},"description":"`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring>,\n \"lastName\": \u003cstring>\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }","uniqueKey":"details.items.[INDEX]","typeLabel":"object"},"uniqueKey":"details","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":123,"message":"\u003cstring>","details":[{"@type":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{},"servers":{},"schemas":{"6a4440d1-bdf7-468d-b92c-7c7469dce655":{"type":"object","properties":{"leaf":{"type":"object","properties":{"computedUserSet":{"type":"object","properties":{"relation":{"type":"string","title":"Relation name"}},"description":"ComputedUserSet defines a set of computed users which includes the relation name."},"tupleToUserSet":{"type":"object","properties":{"tupleSet":{"type":"object","properties":{"relation":{"type":"string"}},"description":"TupleSet represents a set of tuples associated with a specific relation."},"computed":{"type":"object","properties":{"relation":{"type":"string","title":"Relation name"}},"description":"ComputedUserSet defines a set of computed users which includes the relation name."}},"description":"TupleToUserSet defines a mapping from tuple sets to computed user sets."},"computedAttribute":{"type":"object","properties":{"name":{"type":"string","title":"Name of the computed attribute"}},"description":"ComputedAttribute defines a computed attribute which includes its name."},"call":{"type":"object","properties":{"ruleName":{"type":"string","title":"Name of the rule"},"arguments":{"type":"array","items":{"type":"object","properties":{"computedAttribute":{"type":"object","properties":{"name":{"type":"string","title":"Name of the computed attribute"}},"description":"ComputedAttribute defines a computed attribute which includes its name."}},"description":"Argument defines the type of argument in a Call. It can be either a ComputedAttribute or a ContextAttribute."},"title":"Arguments passed to the rule"}},"description":"Call represents a call to a rule. It includes the name of the rule and the arguments passed to it."}},"description":"Leaf represents a leaf node in the permission tree."},"rewrite":{"type":"object","properties":{"rewriteOperation":{"type":"string","enum":["OPERATION_UNSPECIFIED","OPERATION_UNION","OPERATION_INTERSECTION","OPERATION_EXCLUSION"],"default":"OPERATION_UNSPECIFIED","description":"Operation enum includes potential rewrite operations.\nOPERATION_UNION: Represents a union operation.\nOPERATION_INTERSECTION: Represents an intersection operation.\nOPERATION_EXCLUSION: Represents an exclusion operation.\n\n - OPERATION_UNSPECIFIED: Default, unspecified operation.\n - OPERATION_UNION: Represents a union operation.\n - OPERATION_INTERSECTION: Represents an intersection operation.\n - OPERATION_EXCLUSION: Represents an exclusion operation."},"children":{"type":"array","items":{"$circularRef":"6a4440d1-bdf7-468d-b92c-7c7469dce655"},"description":"A list of children that are operated upon by the rewrite operation."}},"description":"The Rewrite message represents a specific rewrite operation.\nThis operation could be one of the following: union, intersection, or exclusion."}},"description":"Child represents a node in the permission tree."},"281308b5-7a31-404b-9a03-80ee311948ad":{"type":"object","properties":{"dyn":{"type":"object","properties":{},"description":"Dynamic type."},"null":{"type":"string","description":"Null value."},"primitive":{"type":"string","enum":["PRIMITIVE_TYPE_UNSPECIFIED","BOOL","INT64","UINT64","DOUBLE","STRING","BYTES"],"default":"PRIMITIVE_TYPE_UNSPECIFIED","description":"CEL primitive types.\n\n - PRIMITIVE_TYPE_UNSPECIFIED: Unspecified type.\n - BOOL: Boolean type.\n - INT64: Int64 type.\n\nProto-based integer values are widened to int64.\n - UINT64: Uint64 type.\n\nProto-based unsigned integer values are widened to uint64.\n - DOUBLE: Double type.\n\nProto-based float values are widened to double values.\n - STRING: String type.\n - BYTES: Bytes type."},"wrapper":{"type":"string","enum":["PRIMITIVE_TYPE_UNSPECIFIED","BOOL","INT64","UINT64","DOUBLE","STRING","BYTES"],"default":"PRIMITIVE_TYPE_UNSPECIFIED","description":"CEL primitive types.\n\n - PRIMITIVE_TYPE_UNSPECIFIED: Unspecified type.\n - BOOL: Boolean type.\n - INT64: Int64 type.\n\nProto-based integer values are widened to int64.\n - UINT64: Uint64 type.\n\nProto-based unsigned integer values are widened to uint64.\n - DOUBLE: Double type.\n\nProto-based float values are widened to double values.\n - STRING: String type.\n - BYTES: Bytes type."},"wellKnown":{"type":"string","enum":["WELL_KNOWN_TYPE_UNSPECIFIED","ANY","TIMESTAMP","DURATION"],"default":"WELL_KNOWN_TYPE_UNSPECIFIED","description":"Well-known protobuf types treated with first-class support in CEL.\n\n - WELL_KNOWN_TYPE_UNSPECIFIED: Unspecified type.\n - ANY: Well-known protobuf.Any type.\n\nAny types are a polymorphic message type. During type-checking they are\ntreated like `DYN` types, but at runtime they are resolved to a specific\nmessage type specified at evaluation time.\n - TIMESTAMP: Well-known protobuf.Timestamp type, internally referenced as `timestamp`.\n - DURATION: Well-known protobuf.Duration type, internally referenced as `duration`."},"listType":{"type":"object","properties":{"elemType":{"oneOf":[{}]}},"description":"List type with typed elements, e.g. `list\u003cexample.proto.MyMessage>`."},"mapType":{"type":"object","properties":{"keyType":{"oneOf":[{}]},"valueType":{"oneOf":[{}]}},"description":"Map type with parameterized key and value types, e.g. `map\u003cstring, int>`."},"function":{"type":"object","properties":{"resultType":{"oneOf":[{}]},"argTypes":{"type":"array","items":{"$circularRef":"281308b5-7a31-404b-9a03-80ee311948ad"},"description":"Argument types of the function."}},"description":"Function type with result and arg types."},"messageType":{"type":"string","description":"Protocol buffer message type.\n\nThe `message_type` string specifies the qualified message type name. For\nexample, `google.plus.Profile`."},"typeParam":{"type":"string","description":"Type param type.\n\nThe `type_param` string specifies the type parameter name, e.g. `list\u003cE>`\nwould be a `list_type` whose element type was a `type_param` type\nnamed `E`."},"type":{"oneOf":[{}]},"error":{"type":"object","properties":{},"description":"Error type.\n\nDuring type-checking if an expression is an error, its type is propagated\nas the `ERROR` type. This permits the type-checker to discover other\nerrors present in the expression."},"abstractType":{"type":"object","properties":{"name":{"type":"string","description":"The fully qualified name of this abstract type."},"parameterTypes":{"type":"array","items":{"$circularRef":"281308b5-7a31-404b-9a03-80ee311948ad"},"description":"Parameter types for this abstract type."}},"description":"Application defined abstract type."}},"description":"Represents a CEL type."},"6e218c32-9eb8-45d8-89a7-ebf9b972008f":{"type":"object","properties":{"id":{"type":"string","format":"int64","description":"Required. An id assigned to this node by the parser which is unique in a\ngiven expression tree. This is used to associate type information and other\nattributes to a node in the parse tree."},"constExpr":{"type":"object","properties":{"nullValue":{"type":"string","description":"null value."},"boolValue":{"type":"boolean","description":"boolean value."},"int64Value":{"type":"string","format":"int64","description":"int64 value."},"uint64Value":{"type":"string","format":"uint64","description":"uint64 value."},"doubleValue":{"type":"number","format":"double","description":"double value."},"stringValue":{"type":"string","description":"string value."},"bytesValue":{"type":"string","format":"byte","description":"bytes value."},"durationValue":{"type":"string","description":"protobuf.Duration value.\n\nDeprecated: duration is no longer considered a builtin cel type."},"timestampValue":{"type":"string","format":"date-time","description":"protobuf.Timestamp value.\n\nDeprecated: timestamp is no longer considered a builtin cel type."}},"description":"Represents a primitive literal.\n\nNamed 'Constant' here for backwards compatibility.\n\nThis is similar as the primitives supported in the well-known type\n`google.protobuf.Value`, but richer so it can represent CEL's full range of\nprimitives.\n\nLists and structs are not included as constants as these aggregate types may\ncontain [Expr][google.api.expr.v1alpha1.Expr] elements which require\nevaluation and are thus not constant.\n\nExamples of literals include: `\"hello\"`, `b'bytes'`, `1u`, `4.2`, `-2`,\n`true`, `null`."},"identExpr":{"type":"object","properties":{"name":{"type":"string","description":"Required. Holds a single, unqualified identifier, possibly preceded by a\n'.'.\n\nQualified names are represented by the\n[Expr.Select][google.api.expr.v1alpha1.Expr.Select] expression."}},"description":"An identifier expression. e.g. `request`."},"selectExpr":{"type":"object","properties":{"operand":{"oneOf":[{}]},"field":{"type":"string","description":"Required. The name of the field to select.\n\nFor example, in the select expression `request.auth`, the `auth` portion\nof the expression would be the `field`."},"testOnly":{"type":"boolean","description":"Whether the select is to be interpreted as a field presence test.\n\nThis results from the macro `has(request.auth)`."}},"description":"A field selection expression. e.g. `request.auth`."},"callExpr":{"type":"object","properties":{"target":{"oneOf":[{}]},"function":{"type":"string","description":"Required. The name of the function or method being called."},"args":{"type":"array","items":{"$circularRef":"6e218c32-9eb8-45d8-89a7-ebf9b972008f"},"description":"The arguments."}},"description":"A call expression, including calls to predefined functions and operators.\n\nFor example, `value == 10`, `size(map_value)`."},"listExpr":{"type":"object","properties":{"elements":{"type":"array","items":{"$circularRef":"6e218c32-9eb8-45d8-89a7-ebf9b972008f"},"description":"The elements part of the list."},"optionalIndices":{"type":"array","items":{"type":"integer","format":"int32"},"description":"The indices within the elements list which are marked as optional\nelements.\n\nWhen an optional-typed value is present, the value it contains\nis included in the list. If the optional-typed value is absent, the list\nelement is omitted from the CreateList result."}},"description":"A list creation expression.\n\nLists may either be homogenous, e.g. `[1, 2, 3]`, or heterogeneous, e.g.\n`dyn([1, 'hello', 2.0])`"},"structExpr":{"type":"object","properties":{"messageName":{"type":"string","description":"The type name of the message to be created, empty when creating map\nliterals."},"entries":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"int64","description":"Required. An id assigned to this node by the parser which is unique\nin a given expression tree. This is used to associate type\ninformation and other attributes to the node."},"fieldKey":{"type":"string","description":"The field key for a message creator statement."},"mapKey":{"oneOf":[{}]},"value":{"oneOf":[{}]},"optionalEntry":{"type":"boolean","description":"Whether the key-value pair is optional."}},"description":"Represents an entry."},"description":"The entries in the creation expression."}},"description":"A map or message creation expression.\n\nMaps are constructed as `{'key_name': 'value'}`. Message construction is\nsimilar, but prefixed with a type name and composed of field ids:\n`types.MyType{field_id: 'value'}`."},"comprehensionExpr":{"type":"object","properties":{"iterVar":{"type":"string","description":"The name of the first iteration variable.\nWhen the iter_range is a list, this variable is the list element.\nWhen the iter_range is a map, this variable is the map entry key."},"iterVar2":{"type":"string","description":"The name of the second iteration variable, empty if not set.\nWhen the iter_range is a list, this variable is the integer index.\nWhen the iter_range is a map, this variable is the map entry value.\nThis field is only set for comprehension v2 macros."},"iterRange":{"oneOf":[{}]},"accuVar":{"type":"string","description":"The name of the variable used for accumulation of the result."},"accuInit":{"oneOf":[{}]},"loopCondition":{"oneOf":[{}]},"loopStep":{"oneOf":[{}]},"result":{"oneOf":[{}]}},"description":"A comprehension expression applied to a list or map.\n\nComprehensions are not part of the core syntax, but enabled with macros.\nA macro matches a specific call signature within a parsed AST and replaces\nthe call with an alternate AST block. Macro expansion happens at parse\ntime.\n\nThe following macros are supported within CEL:\n\nAggregate type macros may be applied to all elements in a list or all keys\nin a map:\n\n* `all`, `exists`, `exists_one` - test a predicate expression against\n the inputs and return `true` if the predicate is satisfied for all,\n any, or only one value `list.all(x, x \u003c 10)`.\n* `filter` - test a predicate expression against the inputs and return\n the subset of elements which satisfy the predicate:\n `payments.filter(p, p > 1000)`.\n* `map` - apply an expression to all elements in the input and return the\n output aggregate type: `[1, 2, 3].map(i, i * i)`.\n\nThe `has(m.x)` macro tests whether the property `x` is present in struct\n`m`. The semantics of this macro depend on the type of `m`. For proto2\nmessages `has(m.x)` is defined as 'defined, but not set`. For proto3, the\nmacro tests whether the property is set to its default. For map and struct\ntypes, the macro tests whether the property `x` is defined on `m`.\n\nComprehensions for the standard environment macros evaluation can be best\nvisualized as the following pseudocode:\n\n```\nlet `accu_var` = `accu_init`\nfor (let `iter_var` in `iter_range`) {\n if (!`loop_condition`) {\n break\n }\n `accu_var` = `loop_step`\n}\nreturn `result`\n```\n\nComprehensions for the optional V2 macros which support map-to-map\ntranslation differ slightly from the standard environment macros in that\nthey expose both the key or index in addition to the value for each list\nor map entry:\n\n```\nlet `accu_var` = `accu_init`\nfor (let `iter_var`, `iter_var2` in `iter_range`) {\n if (!`loop_condition`) {\n break\n }\n `accu_var` = `loop_step`\n}\nreturn `result`\n```"}},"description":"An abstract representation of a common expression.\n\nExpressions are abstractly represented as a collection of identifiers,\nselect statements, function calls, literals, and comprehensions. All\noperators with the exception of the '.' operator are modelled as function\ncalls. This makes it easy to represent new operators into the existing AST.\n\nAll references within expressions must resolve to a\n[Decl][google.api.expr.v1alpha1.Decl] provided at type-check for an\nexpression to be valid. A reference may either be a bare identifier `name` or\na qualified identifier `google.api.name`. References may either refer to a\nvalue or a function declaration.\n\nFor example, the expression `google.api.name.startsWith('expr')` references\nthe declaration `google.api.name` within a\n[Expr.Select][google.api.expr.v1alpha1.Expr.Select] expression, and the\nfunction declaration `startsWith`."}}},"originalFileLocation":"api-reference/openapi.json"},"subdomain":"permify","siteName":"FGA Documentation","title":"Read Schema - FGA Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-09T20:33:01.528Z","originalFileLocation":"api-reference/schema/read-schema.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"application-name\" content=\"FGA Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/permify/a_feQF0dT9qeMKZe/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/permify/a_feQF0dT9qeMKZe/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/permify/a_feQF0dT9qeMKZe/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/permify/a_feQF0dT9qeMKZe/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/permify/a_feQF0dT9qeMKZe/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/permify/a_feQF0dT9qeMKZe/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/permify/a_feQF0dT9qeMKZe/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/permify/a_feQF0dT9qeMKZe/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/permify/a_feQF0dT9qeMKZe/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Read Schema - FGA Documentation\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"FGA Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://proxy-docs.permify.co/api-reference/schema/read-schema\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://permify.mintlify.app/_mintlify/api/og/v2?division=Schema+Service\u0026amp;title=Read+Schema\u0026amp;theme=9be289e78f6ac24dc5c5d06f\u0026amp;signature=4c3eb5ef1a4e4a1096ba8eca6dea8d002f87ec6f0e7ad1a5129f4cdcba89b7d7\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Read Schema - FGA Documentation\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://permify.mintlify.app/_mintlify/api/og/v2?division=Schema+Service\u0026amp;title=Read+Schema\u0026amp;theme=9be289e78f6ac24dc5c5d06f\u0026amp;signature=4c3eb5ef1a4e4a1096ba8eca6dea8d002f87ec6f0e7ad1a5129f4cdcba89b7d7\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/permify/a_feQF0dT9qeMKZe/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"FGA Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#F58320\">\u003clink data-mint-head rel=\"canonical\" href=\"https://proxy-docs.permify.co/api-reference/schema/read-schema\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/schema/read-schema.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://proxy-docs.permify.co/#organization\",\"name\":\"FGA Documentation\",\"url\":\"https://proxy-docs.permify.co\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/permify/s--v0P7cOOW3QatA/logo/light.svg?fit=max\u0026auto=format\u0026n=s--v0P7cOOW3QatA\u0026q=85\u0026s=35df6af816b704ec52d1461bb85c5057\"}},{\"@type\":\"WebSite\",\"@id\":\"https://proxy-docs.permify.co#website\",\"name\":\"FGA Documentation\",\"url\":\"https://proxy-docs.permify.co\",\"publisher\":{\"@id\":\"https://proxy-docs.permify.co/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://proxy-docs.permify.co/api-reference/schema/read-schema#webpage\",\"url\":\"https://proxy-docs.permify.co/api-reference/schema/read-schema\",\"name\":\"Read Schema\",\"dateModified\":\"2026-10-09T20:33:01.528Z\",\"isPartOf\":{\"@id\":\"https://proxy-docs.permify.co#website\"},\"breadcrumb\":{\"@id\":\"https://proxy-docs.permify.co/api-reference/schema/read-schema#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://proxy-docs.permify.co/api-reference/schema/read-schema#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Schema Service\",\"item\":\"https://proxy-docs.permify.co/api-reference/schema/write-schema\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Read Schema\",\"item\":\"https://proxy-docs.permify.co/api-reference/schema/read-schema\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://proxy-docs.permify.co/api-reference/schema/read-schema#apireference\",\"headline\":\"Read Schema\",\"name\":\"Read Schema\",\"url\":\"https://proxy-docs.permify.co/api-reference/schema/read-schema\",\"mainEntityOfPage\":{\"@id\":\"https://proxy-docs.permify.co/api-reference/schema/read-schema#webpage\"},\"dateModified\":\"2026-10-09T20:33:01.528Z\",\"publisher\":{\"@id\":\"https://proxy-docs.permify.co/#organization\"},\"isPartOf\":{\"@id\":\"https://proxy-docs.permify.co#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"FGA Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"FGA Documentation","nav":{"global":null,"tabs":[{"tab":"FGA Documentation","pages":[{"title":"FGA Documentation","href":"/permify-overview/intro"}]},{"tab":"API References","groups":[{"group":"API Documentation","pages":[{"title":"Introduction","href":"/api-reference/introduction"}]},{"group":"Schema Service","pages":[{"title":"Write Schema","openapi":"post /v1/tenants/{tenant_id}/schemas/write","href":"/api-reference/schema/write-schema"},{"title":"List Schema","openapi":"post /v1/tenants/{tenant_id}/schemas/list","href":"/api-reference/schema/list-schema"},{"title":"Partial Schema Update","openapi":"patch /v1/tenants/{tenant_id}/schemas/partial-write","description":null,"href":"/api-reference/schema/partial-write"},{"title":"Read Schema","openapi":"post /v1/tenants/{tenant_id}/schemas/read","href":"/api-reference/schema/read-schema"}]},{"group":"Data Service","pages":[{"title":"Write Authorization Data","openapi":"post /v1/tenants/{tenant_id}/data/write","description":null,"href":"/api-reference/data/write-data"},{"title":"Read Relationships","openapi":"post /v1/tenants/{tenant_id}/data/relationships/read","href":"/api-reference/data/read-relationships"},{"title":"Read Attributes","openapi":"post /v1/tenants/{tenant_id}/data/attributes/read","href":"/api-reference/data/read-attributes"},{"title":"Run Bundle","openapi":"post /v1/tenants/{tenant_id}/data/run-bundle","href":"/api-reference/data/run-bundle"},{"title":"Delete Data","openapi":"post /v1/tenants/{tenant_id}/data/delete","href":"/api-reference/data/delete-data"}]},{"group":"Permission Service","pages":[{"title":"Check Access Control","openapi":"post /v1/tenants/{tenant_id}/permissions/check","href":"/api-reference/permission/check-api"},{"title":"Bulk Check","openapi":"post /v1/tenants/{tenant_id}/permissions/bulk-check","href":"/api-reference/permission/bulk-check"},{"title":"Expand API","openapi":"post /v1/tenants/{tenant_id}/permissions/expand","href":"/api-reference/permission/expand-api"},{"title":"Subject Filtering","openapi":"post /v1/tenants/{tenant_id}/permissions/lookup-subject","href":"/api-reference/permission/lookup-subject"},{"title":"Lookup Entity (Data Filtering)","openapi":"post /v1/tenants/{tenant_id}/permissions/lookup-entity","href":"/api-reference/permission/lookup-entity"},{"title":"Lookup Entity (Streaming)","openapi":"post /v1/tenants/{tenant_id}/permissions/lookup-entity-stream","href":"/api-reference/permission/lookup-entity-stream"},{"title":"Subject Permission List","openapi":"post /v1/tenants/{tenant_id}/permissions/subject-permission","href":"/api-reference/permission/subject-permission"}]},{"group":"Tenancy Service","pages":[{"title":"List Tenants","openapi":"post /v1/tenants/list","href":"/api-reference/tenancy/list-tenants"},{"title":"Create Tenant","openapi":"post /v1/tenants/create","href":"/api-reference/tenancy/create-tenant"},{"title":"Delete Tenant","openapi":"delete /v1/tenants/{id}","href":"/api-reference/tenancy/delete-tenant"}]},{"group":"Bundle Service","pages":[{"title":"Write Bundle","openapi":"post /v1/tenants/{tenant_id}/bundle/write","href":"/api-reference/bundle/write-bundle"},{"title":"Read Bundle","openapi":"post /v1/tenants/{tenant_id}/bundle/read","href":"/api-reference/bundle/read-bundle"},{"title":"Delete Bundle","openapi":"post /v1/tenants/{tenant_id}/bundle/delete","href":"/api-reference/bundle/delete-bundle"}]},{"group":"Watch Service","pages":[{"title":"Watch API","openapi":"post /v1/tenants/{tenant_id}/watch","href":"/api-reference/watch/watch-changes"}]}]}]},"title":"Read Schema - FGA Documentation","buildId":"dpl_849ArpqvBiCczQiT1Y1stNGpbqHT","deploymentId":"dpl_849ArpqvBiCczQiT1Y1stNGpbqHT","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a74be98ba7","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-Bbp7I60D.js","utils-C3RIvJha.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DqD-vLt8.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-B31Loprg.js","snippetPresets-DKpk-b8t.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-Cj65AhOR.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BXtn5gcC.js","shallow-RY2b03Cp.js","getApiPlaygroundDisplay-B0jeiPk3.js","CodeSnippet-CYgBjjwn.js","CodeSnippets-DOngDrYB.js","Page-n7I5XbKb.js","getPastedJson-DRQbJx-T.js","icon-CQiQCicY.js","MethodPill-BKTLdNtu.js","DuplicateIcon-B9jpAdat.js","createIcon-DCddRrXv.js","DynamicMarkdown-a8hUKrw6.js","SectionHeading-eECVV2eH.js","axios-vUo_bRtp.js","zoom-image-lightbox-CaUwvYH3.js","lightbox-handle-r17bVUz3.js","Markdown--GF7ZIpf.js","clsx-DZLdJUrt.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-2LoAhjKH.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-Zwc0ZncM.js"]}