| openapi: 3.0.0 |
| info: |
| title: 'A1-P Policy Management Service' |
| version: 1.1.x |
| description: | |
| API for Policy Management Service. |
| © 2019, O-RAN Alliance. |
| All rights reserved. |
| externalDocs: |
| description: 'ORAN-WG2.A1.AP-v01.01 A1 interface: Application protocol' |
| url: 'https://www.o-ran.org/specifications' |
| servers: |
| - url: '{apiRoot}/A1-P/v1' |
| variables: |
| apiRoot: |
| default: 'https://example.com' |
| description: 'apiRoot as defined in clause 4.2.1 in ORAN-WG2.A1.AP' |
| paths: |
| '/policies': |
| get: |
| operationId: a1.get_all_policies |
| description: 'Get all policies including their enforcement status' |
| tags: |
| - All Policy Objects |
| responses: |
| 200: |
| description: 'Array of all policies and their enforcement status' |
| content: |
| application/json: |
| schema: |
| type: array |
| items: |
| "$ref": "#/components/schemas/PolicyObject" |
| minItems: 0 |
| |
| '/policies/identities': |
| get: |
| operationId: a1.get_all_policy_identities |
| description: 'Get all policy identities' |
| tags: |
| - All Policy Identities |
| responses: |
| 200: |
| description: 'Array of all policy identities' |
| content: |
| application/json: |
| schema: |
| type: array |
| items: |
| "$ref": "#/components/schemas/PolicyId" |
| minItems: 0 |
| |
| '/policies/status': |
| get: |
| operationId: a1.get_all_policy_status |
| description: 'Get enforcement status for all policy instances' |
| tags: |
| - All Policy Status Objects |
| responses: |
| 200: |
| description: 'Array of all policy identities and their related enforcement status' |
| content: |
| application/json: |
| schema: |
| type: array |
| items: |
| "$ref": "#/components/schemas/PolicyStatusObject" |
| minItems: 0 |
| |
| '/policies/{policyId}': |
| parameters: |
| - name: policyId |
| in: path |
| required: true |
| schema: |
| "$ref": "#/components/schemas/PolicyId" |
| put: |
| operationId: a1.put_policy |
| description: 'Create, or update, a policy' |
| tags: |
| - Individual Policy Object |
| requestBody: |
| content: |
| application/json: |
| schema: |
| "$ref": "#/components/schemas/PolicyObject" |
| responses: |
| 200: |
| description: 'The policy was updated' |
| content: |
| application/json: |
| schema: |
| "$ref": "#/components/schemas/PolicyObject" |
| 201: |
| description: 'The policy was created' |
| content: |
| application/json: |
| schema: |
| "$ref": "#/components/schemas/PolicyObject" |
| headers: |
| Location: |
| description: 'Contains the URI of the created policy' |
| required: true |
| schema: |
| type: string |
| 400: |
| "$ref": "#/components/responses/400-BadRequest" |
| callbacks: |
| policyNotification: |
| '$request.body#/notificationDestination': |
| post: |
| description: 'Notify about enforcement status changes for this policy' |
| requestBody: |
| required: true |
| content: |
| application/json: |
| schema: |
| "$ref": "#/components/schemas/PolicyStatusObject" |
| responses: |
| 204: |
| description: 'Notification received' |
| get: |
| operationId: a1.get_policy |
| description: 'Query single policy' |
| tags: |
| - Individual Policy Object |
| responses: |
| 200: |
| description: 'The requested policy' |
| content: |
| application/json: |
| schema: |
| "$ref": "#/components/schemas/PolicyObject" |
| 404: |
| "$ref": "#/components/responses/404-NotFound" |
| delete: |
| operationId: a1.delete_policy |
| description: 'Delete policy' |
| tags: |
| - Individual Policy Object |
| responses: |
| 204: |
| description: 'The policy was deleted' |
| 404: |
| "$ref": "#/components/responses/404-NotFound" |
| |
| '/policies/{policyId}/status': |
| parameters: |
| - name: policyId |
| in: path |
| required: true |
| schema: |
| "$ref": "#/components/schemas/PolicyId" |
| get: |
| operationId: a1.get_policy_status |
| description: 'Get the enforcement status of a policy' |
| tags: |
| - Individual Policy Status Object |
| responses: |
| 200: |
| description: 'The requested enforcement status' |
| content: |
| application/json: |
| schema: |
| "$ref": "#/components/schemas/PolicyStatusObject" |
| 404: |
| "$ref": "#/components/responses/404-NotFound" |
| |
| '/policytypes': |
| get: |
| operationId: a1.get_all_policytypes |
| description: 'Get all policy type schemas' |
| tags: |
| - All Policy Types |
| responses: |
| 200: |
| description: 'Array of all policy type schemas' |
| content: |
| application/json: |
| schema: |
| type: array |
| items: |
| "$ref": "#/components/schemas/PolicyTypeSchema" |
| minItems: 0 |
| |
| '/policytypes/identities': |
| get: |
| operationId: a1.get_all_policytypes_identities |
| description: 'Get all policy type identities' |
| tags: |
| - All Policy Type Identities |
| responses: |
| 200: |
| description: 'Array of all policy type identities' |
| content: |
| application/json: |
| schema: |
| type: array |
| items: |
| "$ref": "#/components/schemas/PolicyTypeId" |
| minItems: 0 |
| |
| '/policytypes/{policyTypeId}': |
| parameters: |
| - name: policyTypeId |
| in: path |
| required: true |
| schema: |
| "$ref": "#/components/schemas/PolicyTypeId" |
| get: |
| operationId: a1.get_policytypes |
| description: 'Get the schema for a policy type' |
| tags: |
| - Individual Policy Type |
| responses: |
| 200: |
| description: 'The policy type schema' |
| content: |
| application/json: |
| schema: |
| "$ref": "#/components/schemas/PolicyTypeSchema" |
| 404: |
| "$ref": "#/components/responses/404-NotFound" |
| |
| '/policytypes/subscription': |
| put: |
| operationId: a1.put_policytypes_subscription |
| description: 'Subscribe to notification when any change is made to supported policy types' |
| tags: |
| - Policy Types Subscription Object |
| requestBody: |
| content: |
| application/json: |
| schema: |
| "$ref": "#/components/schemas/SubscriptionObject" |
| responses: |
| 200: |
| description: 'The subscription was updated' |
| 201: |
| description: 'The subscription was created' |
| callbacks: |
| policyTypesNotification: |
| '$request.body#/notificationDestination': |
| post: |
| description: 'Notify about any change in supported policy types' |
| responses: |
| 204: |
| description: 'Notification received' |
| get: |
| operationId: a1.get_policytypes_subscription |
| description: 'Get current notification destination' |
| tags: |
| - Policy Types Subscription Object |
| responses: |
| 200: |
| description: 'The current notification destination' |
| content: |
| application/json: |
| schema: |
| "$ref": "#/components/schemas/SubscriptionObject" |
| 404: |
| "$ref": "#/components/responses/404-NotFound" |
| |
| components: |
| schemas: |
| # |
| # Representation objects |
| # |
| PolicyStatusObject: |
| type: object |
| properties: |
| policyId: |
| "$ref": "#/components/schemas/PolicyId" |
| enforceStatus: |
| "$ref": "#/components/schemas/EnforcementStatusType" |
| enforceReason: |
| "$ref": "#/components/schemas/EnforcementReasonType" |
| required: |
| - policyId |
| - enforceStatus |
| |
| PolicyObject: |
| description: 'A policy object, including its identification, type information, its notification destination, and optionally its enforcement status.' |
| type: object |
| properties: |
| policyId: |
| "$ref": "#/components/schemas/PolicyId" |
| policyTypeId: |
| "$ref": "#/components/schemas/PolicyTypeId" |
| policyClause: |
| "$ref": "#/components/schemas/PolicyClause" |
| notificationDestination: |
| "$ref": "#/components/schemas/NotificationDestination" |
| enforceStatus: |
| "$ref": "#/components/schemas/EnforcementStatusType" |
| required: |
| - policyId |
| - policyTypeId |
| - policyClause |
| - notificationDestination |
| |
| PolicyTypeSchema: |
| description: 'The JSON Schema for a policy type. All policies of a policy type shall validate against this schema.' |
| type: object |
| properties: |
| description: |
| type: string |
| properties: |
| type: object |
| title: |
| type: string |
| type: |
| type: string |
| required: |
| - description |
| - properties |
| - title |
| - type |
| |
| ProblemDetails: |
| description: 'A problem detail to carry details in a HTTP response according to RFC 7807 extended with A1 specific attributes' |
| type: object |
| properties: |
| type: |
| type: string |
| title: |
| type: string |
| status: |
| type: number |
| detail: |
| type: string |
| instance: |
| type: string |
| policyErrorCode: |
| "$ref": "#/components/schemas/PolicyErrorType" |
| invalidParams: |
| type: array |
| items: |
| "$ref": "#/components/schemas/InvalidParam" |
| minItems: 1 |
| |
| SubscriptionObject: |
| description: 'A subscription object used for specifying the destination where to send notifications.' |
| type: object |
| properties: |
| notificationDestination: |
| "$ref": "#/components/schemas/NotificationDestination" |
| required: |
| - notificationDestination |
| |
| # |
| # Structured data types |
| # |
| InvalidParam: |
| description: 'Used in a ProblemDetails to indicate a specific invalid parameter' |
| type: object |
| properties: |
| param: |
| type: string |
| reason: |
| type: string |
| required: |
| - param |
| |
| PolicyClause: |
| description: 'The schema for a generic policy clause that shall be valid for all different specific policy types.' |
| type: object |
| properties: |
| scope: |
| "$ref": "#/components/schemas/ScopeIdentifier" |
| statement: |
| description: 'The statement for a specific policy type. The schema is specified by a specific policy type.' |
| type: object |
| required: |
| - scope |
| - statement |
| |
| ScopeIdentifier: |
| description: 'The schema for a generic scope identifier that shall be valid for all different specific policy types.' |
| type: object |
| properties: |
| ueId: |
| description: 'UE identifier based on RAN UE Id' |
| type: string |
| groupId: |
| description: 'Identifier of a pre-defined group of UEs, SPID' |
| type: string |
| sliceId: |
| description: 'Network slice identifie, NSSAI' |
| type: string |
| qosId: |
| description: 'QoS identifer, 5QI' |
| type: string |
| cellId: |
| description: 'Network resource identifier for a cell' |
| type: string |
| |
| # |
| # Simple data types |
| # |
| PolicyId: |
| description: 'Policy identifier assigned by the A1-P Consumer when a policy is created' |
| type: string |
| |
| PolicyTypeId: |
| description: 'Policy type identifier assigned by the A1-P Provider' |
| pattern: "^(STD|EXT)_[a-zA-Z]+_(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)$" |
| type: string |
| |
| NotificationDestination: |
| description: 'A complete URI defined according to IETF RFC 3986 where to send notifications' |
| type: string |
| nullable: true |
| |
| # |
| # Enumerations |
| # |
| EnforcementStatusType: |
| description: 'Indicating if a policy is being enforced or not' |
| type: string |
| enum: |
| - "ENFORCED" |
| - "NOT_ENFORCED" |
| - "UNDEFINED" |
| |
| EnforcementReasonType: |
| description: 'Indicating the reason why a policy is not being enforced' |
| anyOf: |
| - type: string |
| enum: |
| - "100" |
| - "200" |
| - "300" |
| - "800" |
| - type: string |
| |
| PolicyErrorType: |
| description: 'Represents information that can be provided in addition to the HTTP response error code. Corresponds to the "cause" attribute defined in 3GPP specification 29.501.' |
| anyOf: |
| - type: string |
| enum: |
| - "CONF_POLICY_ID" |
| - "BAD_REQ_MISSING_PARAM" |
| - type: string |
| |
| responses: |
| 400-BadRequest: |
| description: 'Object in payload not properly formulated or not related to the method' |
| content: |
| application/problem+json: |
| schema: |
| "$ref": "#/components/schemas/ProblemDetails" |
| |
| 404-NotFound: |
| description: 'No resource found at the URI' |
| content: |
| application/problem+json: |
| schema: |
| "$ref": "#/components/schemas/ProblemDetails" |
| |
| 405-MethodNotAllowed: |
| description: 'Method not allowed for the URI' |
| content: |
| application/problem+json: |
| schema: |
| "$ref": "#/components/schemas/ProblemDetails" |