openapi: 3.0.3 info: title: Global System for Mobile Communications GSMA Camara Project Endpoint Discovery Application Geofencing Subscriptions API version: 0.1.0-wip description: The Application Discovery API extends beyond the capabilities of the Simple Edge Discovery API by not only locating the nearest Edge Cloud Zone but also directly linking to the application endpoints within those Edge Cloud Zones. contact: email: sp-edc@lists.camaraproject.org license: name: Apache 2.0 url: https://www.apache.org/licenses/LICENSE-2.0.html servers: - url: '{apiRoot}/{basePath}' variables: apiRoot: default: https://localhost:443 description: API root. basePath: default: application-endpoint-discovery/vwip description: Base path for the Application Endpoint Discovery. tags: - name: Geofencing Subscriptions description: Operations to manage event subscription on geofencing events for leaving and entering an area paths: /subscriptions: post: tags: - Geofencing Subscriptions summary: Global System for Mobile Communications Create a geofencing subscription for a device description: Create a subscription for a device to receive notifications when a device enters or exits a specified area operationId: createSubscription parameters: - $ref: '#/components/parameters/x-correlator' security: - openId: - geofencing-subscriptions:org.camaraproject.geofencing-subscriptions.v0.area-entered:create - geofencing-subscriptions:org.camaraproject.geofencing-subscriptions.v0.area-left:create requestBody: content: application/json: schema: $ref: '#/components/schemas/SubscriptionRequest' examples: CIRCLE_AREA_ENTERED: $ref: '#/components/examples/REQUEST_CIRCLE_AREA_ENTERED' required: true callbacks: notifications: '{$request.body#/sink}': post: summary: notifications callback description: 'Important: this endpoint is to be implemented by the API consumer. The Geofencing server will call this endpoint whenever a Geofencing event occurs. `operationId` value will have to be replaced accordingly with WG API specific semantic ' operationId: postNotification parameters: - $ref: '#/components/parameters/x-correlator' requestBody: required: true content: application/cloudevents+json: schema: $ref: '#/components/schemas/CloudEvent' examples: CIRCLE_AREA_ENTERED: $ref: '#/components/examples/CIRCLE_AREA_ENTERED' CIRCLE_AREA_LEFT: $ref: '#/components/examples/CIRCLE_AREA_LEFT' SUBSCRIPTION_ENDS: $ref: '#/components/examples/SUBSCRIPTION_ENDS' SUBSCRIPTION_UNPROCESSABLE: $ref: '#/components/examples/SUBSCRIPTION_UNPROCESSABLE' responses: '204': description: Successful notification headers: x-correlator: $ref: '#/components/headers/x-correlator' '400': $ref: '#/components/responses/Generic400' '401': $ref: '#/components/responses/Generic401' '403': $ref: '#/components/responses/Generic403' '500': $ref: '#/components/responses/Generic500' '503': $ref: '#/components/responses/Generic503' security: - {} - notificationsBearerAuth: [] responses: '201': description: Created (Successful creation of subscription) headers: x-correlator: $ref: '#/components/headers/x-correlator' content: application/json: schema: $ref: '#/components/schemas/Subscription' '202': description: Request accepted to be processed. It applies for async creation process. headers: x-correlator: $ref: '#/components/headers/x-correlator' content: application/json: schema: $ref: '#/components/schemas/SubscriptionAsync' '400': $ref: '#/components/responses/CreateSubscriptionBadRequest400' '401': $ref: '#/components/responses/Generic401' '403': $ref: '#/components/responses/Generic403' '422': $ref: '#/components/responses/CreateSubscriptionUnprocessableEntity422' '429': $ref: '#/components/responses/Generic429' '500': $ref: '#/components/responses/Generic500' '503': $ref: '#/components/responses/Generic503' get: tags: - Geofencing Subscriptions summary: Global System for Mobile Communications Retrieve a list of geofencing event subscription description: Retrieve a list of geofencing event subscription(s) operationId: retrieveGeofencingSubscriptionList parameters: - $ref: '#/components/parameters/x-correlator' security: - openId: - geofencing-subscriptions:read responses: '200': description: List of event subscription details headers: x-correlator: $ref: '#/components/headers/x-correlator' content: application/json: schema: type: array minItems: 0 items: $ref: '#/components/schemas/Subscription' '400': $ref: '#/components/responses/Generic400' '401': $ref: '#/components/responses/Generic401' '403': $ref: '#/components/responses/Generic403' '429': $ref: '#/components/responses/Generic429' '500': $ref: '#/components/responses/Generic500' '503': $ref: '#/components/responses/Generic503' /subscriptions/{subscriptionId}: get: tags: - Geofencing Subscriptions summary: Global System for Mobile Communications Operation to retrieve a subscription based on the provided ID description: retrieve Geofencing subscription information for a given subscription ID. operationId: retrieveGeofencingSubscription security: - openId: - geofencing-subscriptions:read parameters: - $ref: '#/components/parameters/SubscriptionId' - $ref: '#/components/parameters/x-correlator' responses: '200': description: OK headers: x-correlator: $ref: '#/components/headers/x-correlator' content: application/json: schema: $ref: '#/components/schemas/Subscription' '400': $ref: '#/components/responses/SubscriptionIdRequired' '401': $ref: '#/components/responses/Generic401' '403': $ref: '#/components/responses/Generic403' '404': $ref: '#/components/responses/Generic404' '429': $ref: '#/components/responses/Generic429' '500': $ref: '#/components/responses/Generic500' '503': $ref: '#/components/responses/Generic503' delete: tags: - Geofencing Subscriptions summary: Global System for Mobile Communications Delete a Geofencing event subscription operationId: deleteGeofencingSubscription description: delete a given Geofencing subscription. security: - openId: - geofencing-subscriptions:delete parameters: - $ref: '#/components/parameters/SubscriptionId' - $ref: '#/components/parameters/x-correlator' responses: '202': description: Request accepted to be processed. It applies for async deletion process. headers: x-correlator: $ref: '#/components/headers/x-correlator' content: application/json: schema: $ref: '#/components/schemas/SubscriptionAsync' '204': description: Geofencing subscription deleted headers: x-correlator: $ref: '#/components/headers/x-correlator' '400': $ref: '#/components/responses/SubscriptionIdRequired' '401': $ref: '#/components/responses/Generic401' '403': $ref: '#/components/responses/Generic403' '404': $ref: '#/components/responses/Generic404' '429': $ref: '#/components/responses/Generic429' '500': $ref: '#/components/responses/Generic500' '503': $ref: '#/components/responses/Generic503' components: responses: Generic503: description: Service unavailable. Typically the server is down. headers: x-correlator: $ref: '#/components/headers/x-correlator' content: application/json: schema: $ref: '#/components/schemas/ErrorInfo' examples: GENERIC_503_UNAVAILABLE: description: Service is not available. Temporary situation usually related to maintenance process in the server side value: status: 503 code: UNAVAILABLE message: Service Unavailable. Generic500: description: Server error headers: x-correlator: $ref: '#/components/headers/x-correlator' content: application/json: schema: $ref: '#/components/schemas/ErrorInfo' example: status: 500 code: INTERNAL message: Server error Generic429: description: Too Many Requests headers: X-Correlator: $ref: '#/components/headers/x-correlator' content: application/json: schema: $ref: '#/components/schemas/ErrorInfo' examples: GENERIC_429_QUOTA_EXCEEDED: description: Request is rejected due to exceeding a business quota limit value: status: 429 code: QUOTA_EXCEEDED message: Either out of resource quota or reaching rate limiting. GENERIC_429_TOO_MANY_REQUESTS: description: API Server request limit is overpassed value: status: 429 code: TOO_MANY_REQUESTS message: Either out of resource quota or reaching rate limiting. CreateSubscriptionBadRequest400: description: Problem with the client request headers: x-correlator: $ref: '#/components/headers/x-correlator' content: application/json: schema: $ref: '#/components/schemas/ErrorInfo' examples: InvalidArgument: value: status: 400 code: INVALID_ARGUMENT message: Client specified an invalid argument, request body or query param InvalidProtocol: value: status: 400 code: INVALID_PROTOCOL message: Only HTTP is supported InvalidCredential: value: status: 400 code: INVALID_CREDENTIAL message: Only Access token is supported InvalidToken: value: status: 400 code: INVALID_TOKEN message: Only bearer token is supported Generic400: description: Bad Request headers: x-correlator: $ref: '#/components/headers/x-correlator' content: application/json: schema: $ref: '#/components/schemas/ErrorInfo' example: status: 400 code: INVALID_ARGUMENT message: Client specified an invalid argument, request body or query param CreateSubscriptionUnprocessableEntity422: description: Unprocessable Entity headers: x-correlator: $ref: '#/components/headers/x-correlator' content: application/json: schema: $ref: '#/components/schemas/ErrorInfo' examples: PermissionDenied: value: status: 422 code: MULTIEVENT_SUBSCRIPTION_NOT_SUPPORTED message: Multi event types subscription not managed DeviceIdentifierMismatch: description: Inconsistency between device identifiers not pointing to the same device value: status: 422 code: DEVICE_IDENTIFIERS_MISMATCH message: Provided device identifiers are not consistent. DeviceNotApplicable: description: Service is not available for the provided device value: status: 422 code: DEVICE_NOT_APPLICABLE message: The service is not available for the provided device. AreaNotCovered: value: status: 422 code: AREA_NOT_COVERED message: The specified area cannot be covered or is too small to be valid SubscriptionIdRequired: description: Problem with the client request headers: x-correlator: $ref: '#/components/headers/x-correlator' content: application/json: schema: $ref: '#/components/schemas/ErrorInfo' examples: Generic400: summary: Schema validation failed value: status: 400 code: INVALID_ARGUMENT message: Client specified an invalid argument, request body or query param subscriptionIdRequired: summary: subscription id is required value: status: 400 code: INVALID_ARGUMENT message: 'Expected property is missing: subscriptionId' Generic401: description: Authentication problem with the client request headers: x-correlator: $ref: '#/components/headers/x-correlator' content: application/json: schema: $ref: '#/components/schemas/ErrorInfo' example: status: 401 code: UNAUTHENTICATED message: Request not authenticated due to missing, invalid, or expired credentials. Generic403: description: Forbidden headers: x-correlator: $ref: '#/components/headers/x-correlator' content: application/json: schema: $ref: '#/components/schemas/ErrorInfo' example: status: 403 code: PERMISSION_DENIED message: Client does not have sufficient permissions to perform this action Generic404: description: Not found headers: x-correlator: $ref: '#/components/headers/x-correlator' content: application/json: schema: $ref: '#/components/schemas/ErrorInfo' examples: GENERIC_404_NOT_FOUND: description: Resource is not found value: status: 404 code: NOT_FOUND message: The specified resource is not found. schemas: NotificationEventType: type: string description: 'area-entered - Event triggered when the device enters the given area area-left - Event triggered when the device leaves the given area subscription-ends - Event triggered when the subscription ends ' enum: - org.camaraproject.geofencing-subscriptions.v0.area-entered - org.camaraproject.geofencing-subscriptions.v0.area-left - org.camaraproject.geofencing-subscriptions.v0.subscription-ends Protocol: type: string enum: - HTTP - MQTT3 - MQTT5 - AMQP - NATS - KAFKA description: Identifier of a delivery protocol. Only HTTP is allowed for now example: HTTP SubscriptionId: type: string description: The unique identifier of the subscription in the scope of the subscription manager. When this information is contained within an event notification, this concept SHALL be referred as `subscriptionId` as per [Commonalities Event Notification Model](https://github.com/camaraproject/Commonalities/blob/main/documentation/API-design-guidelines.md#122-event-notification). example: qs15-h556-rt89-1298 SubscriptionAsync: description: Response for a event-type subscription request managed asynchronously (Creation or Deletion) type: object properties: id: $ref: '#/components/schemas/SubscriptionId' CloudEvent: description: The notification callback required: - id - source - specversion - type - time - data properties: id: type: string description: identifier of this event, that must be unique in the source context. source: $ref: '#/components/schemas/Source' type: $ref: '#/components/schemas/NotificationEventType' specversion: type: string description: Version of the specification to which this event conforms (must be 1.0 if it conforms to cloudevents 1.0.2 version) enum: - '1.0' datacontenttype: type: string description: media-type that describes the event payload encoding, must be "application/json" for CAMARA APIs enum: - application/json data: type: object description: Event details payload described in each CAMARA API and referenced by its type time: $ref: '#/components/schemas/DateTime' discriminator: propertyName: type mapping: org.camaraproject.geofencing-subscriptions.v0.area-left: '#/components/schemas/EventAreaLeft' org.camaraproject.geofencing-subscriptions.v0.area-entered: '#/components/schemas/EventAreaEntered' org.camaraproject.geofencing-subscriptions.v0.subscription-ends: '#/components/schemas/EventSubscriptionEnds' SingleIpv4Addr: description: A single IPv4 address with no subnet mask type: string format: ipv4 example: 84.125.93.10 SubscriptionRequest: description: The request for creating a event-type event subscription type: object required: - sink - protocol - config - types properties: protocol: $ref: '#/components/schemas/Protocol' sink: type: string format: url description: The address to which events shall be delivered using the selected protocol. example: https://endpoint.example.com/sink sinkCredential: allOf: - description: A sink credential provides authentication or authorization information necessary to enable delivery of events to a target. - $ref: '#/components/schemas/SinkCredential' types: description: 'Camara Event types eligible to be delivered by this subscription. Note: As of now we enforce to have only event type per subscription. ' type: array minItems: 1 maxItems: 1 items: $ref: '#/components/schemas/SubscriptionEventType' config: $ref: '#/components/schemas/Config' discriminator: propertyName: protocol mapping: HTTP: '#/components/schemas/HTTPSubscriptionRequest' MQTT3: '#/components/schemas/MQTTSubscriptionRequest' MQTT5: '#/components/schemas/MQTTSubscriptionRequest' AMQP: '#/components/schemas/AMQPSubscriptionRequest' NATS: '#/components/schemas/NATSSubscriptionRequest' KAFKA: '#/components/schemas/ApacheKafkaSubscriptionRequest' AreaType: type: string description: 'Type of this area. CIRCLE - The area is defined as a circle. ' enum: - CIRCLE PhoneNumber: description: A public identifier addressing a telephone subscription. In mobile networks it corresponds to the MSISDN (Mobile Station International Subscriber Directory Number). In order to be globally unique it has to be formatted in international format, according to E.164 standard, prefixed with '+'. type: string pattern: ^\+[1-9][0-9]{4,14}$ example: '+123456789' DeviceIpv4Addr: type: object description: 'The device should be identified by either the public (observed) IP address and port as seen by the application server, or the private (local) and any public (observed) IP addresses in use by the device (this information can be obtained by various means, for example from some DNS servers). If the allocated and observed IP addresses are the same (i.e. NAT is not in use) then the same address should be specified for both publicAddress and privateAddress. If NAT64 is in use, the device should be identified by its publicAddress and publicPort, or separately by its allocated IPv6 address (field ipv6Address of the Device object) In all cases, publicAddress must be specified, along with at least one of either privateAddress or publicPort, dependent upon which is known. In general, mobile devices cannot be identified by their public IPv4 address alone. ' properties: publicAddress: $ref: '#/components/schemas/SingleIpv4Addr' privateAddress: $ref: '#/components/schemas/SingleIpv4Addr' publicPort: $ref: '#/components/schemas/Port' anyOf: - required: - publicAddress - privateAddress - required: - publicAddress - publicPort example: publicAddress: 84.125.93.10 publicPort: 59765 SubscriptionEventType: type: string description: 'area-entered - Event triggered when the device enters the given area area-left - Event triggered when the device leaves the given area ' enum: - org.camaraproject.geofencing-subscriptions.v0.area-entered - org.camaraproject.geofencing-subscriptions.v0.area-left Area: type: object properties: areaType: $ref: '#/components/schemas/AreaType' required: - areaType discriminator: propertyName: areaType mapping: CIRCLE: '#/components/schemas/Circle' Source: type: string format: uri-reference minLength: 1 description: "Identifies the context in which an event happened - be a non-empty `URI-reference` like:\n- URI with a DNS authority:\n * https://github.com/cloudevents\n * mailto:cncf-wg-serverless@lists.cncf.io\n- Universally-unique URN with a UUID:\n * urn:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66\n- Application-specific identifier:\n * /cloudevents/spec/pull/123\n * 1-555-123-4567\n" example: https://notificationSendServer12.supertelco.com Subscription: description: Represents a event-type subscription. type: object required: - sink - protocol - config - types - id - startsAt properties: protocol: $ref: '#/components/schemas/Protocol' sink: type: string format: url description: The address to which events shall be delivered using the selected protocol. example: https://endpoint.example.com/sink sinkCredential: $ref: '#/components/schemas/SinkCredential' types: description: 'Camara Event types eligible to be delivered by this subscription. ' type: array items: type: string config: $ref: '#/components/schemas/Config' id: type: string description: The unique identifier of the subscription in the scope of the subscription manager. When this information is contained within an event notification, this concept SHALL be referred as `subscriptionId` as per [Commonalities Event Notification Model](https://github.com/camaraproject/Commonalities/blob/main/documentation/API-design-guidelines.md#122-event-notification). example: '1119920371' startsAt: type: string format: date-time description: Date when the event subscription will begin/began expiresAt: type: string format: date-time description: Date when the event subscription will expire. Only provided when `subscriptionExpireTime` is indicated by API client or Telco Operator has specific policy about that. status: type: string description: "Current status of the subscription - Management of Subscription State engine is not mandatory for now. Note not all statuses may be considered to be implemented. Details:\n - `ACTIVATION_REQUESTED`: Subscription creation (POST) is triggered but subscription creation process is not finished yet.\n - `ACTIVE`: Subscription creation process is completed. Subscription is fully operative.\n - `INACTIVE`: Subscription is temporarily inactive, but its workflow logic is not deleted.\n - `EXPIRED`: Subscription is ended (no longer active). This status applies when subscription is ended due to `SUBSCRIPTION_EXPIRED` or `ACCESS_TOKEN_EXPIRED` event.\n - `DELETED`: Subscription is ended as deleted (no longer active). This status applies when subscription information is kept (i.e. subscription workflow is no longer active but its meta-information is kept)." enum: - ACTIVATION_REQUESTED - ACTIVE - EXPIRED - INACTIVE - DELETED discriminator: propertyName: protocol mapping: HTTP: '#/components/schemas/HTTPSubscriptionResponse' MQTT3: '#/components/schemas/MQTTSubscriptionResponse' MQTT5: '#/components/schemas/MQTTSubscriptionResponse' AMQP: '#/components/schemas/AMQPSubscriptionResponse' NATS: '#/components/schemas/NATSSubscriptionResponse' KAFKA: '#/components/schemas/ApacheKafkaSubscriptionResponse' ErrorInfo: description: The error info object for possible error cases type: object required: - status - code - message properties: status: type: integer description: HTTP response status code code: type: string description: Code given to this error message: type: string description: Detailed error description SinkCredential: type: object properties: credentialType: type: string enum: - PLAIN - ACCESSTOKEN - REFRESHTOKEN description: The type of the credential. discriminator: propertyName: credentialType mapping: PLAIN: '#/components/schemas/PlainCredential' ACCESSTOKEN: '#/components/schemas/AccessTokenCredential' REFRESHTOKEN: '#/components/schemas/RefreshTokenCredential' required: - credentialType DeviceIpv6Address: description: 'The device should be identified by the observed IPv6 address, or by any single IPv6 address from within the subnet allocated to the device (e.g. adding ::0 to the /64 prefix). ' type: string format: ipv6 example: 2001:db8:85a3:8d3:1319:8a2e:370:7344 SubscriptionDetail: description: The detail of the requested event subscription type: object properties: device: $ref: '#/components/schemas/Device' area: $ref: '#/components/schemas/Area' required: - device - area DateTime: type: string format: date-time description: Timestamp of when the occurrence happened. Must adhere to RFC 3339. example: '2018-04-05T17:31:00Z' Config: description: 'Implementation-specific configuration parameters needed by the subscription manager for acquiring events. In CAMARA we have predefined attributes like `subscriptionExpireTime`, `subscriptionMaxEvents`, `initialEvent` Specific event type attributes must be defined in `subscriptionDetail` Note: if a request is performed for several event type, all subscribed event will use same `config` parameters. ' type: object required: - subscriptionDetail properties: subscriptionDetail: $ref: '#/components/schemas/SubscriptionDetail' subscriptionExpireTime: type: string format: date-time example: '2023-01-17T13:18:23.682Z' description: The subscription expiration time (in date-time format) requested by the API consumer. subscriptionMaxEvents: type: integer description: Identifies the maximum number of event reports to be generated (>=1) requested by the API consumer - Once this number is reached, the subscription ends. minimum: 1 example: 5 initialEvent: type: boolean description: 'Set to `true` by API consumer if consumer wants to get an event as soon as the subscription is created and current situation reflects event request. Example: Consumer request area entered event. If consumer sets initialEvent to true and device is already in the geofence, an event is triggered ' Port: description: TCP or UDP port number type: integer minimum: 0 maximum: 65535 Device: description: 'End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators. The developer can choose to provide the below specified device identifiers: * `ipv4Address` * `ipv6Address` * `phoneNumber` * `networkAccessIdentifier` NOTE1: the MNO might support only a subset of these options. The API invoker can provide multiple identifiers to be compatible across different MNOs. In this case the identifiers MUST belong to the same device. When returned as part of a response, the device object must include the same identifier values that were provided originally. Please note that IP addresses of devices can change and get reused, so the original values may no longer identify the same device. They identified the device at the time of the subscription request. NOTE2: for the Commonalities release v0.4, we are enforcing that the networkAccessIdentifier is only part of the schema for future-proofing, and CAMARA does not currently allow its use. After the CAMARA meta-release work is concluded and the relevant issues are resolved, its use will need to be explicitly documented in the guidelines. ' type: object properties: phoneNumber: $ref: '#/components/schemas/PhoneNumber' networkAccessIdentifier: $ref: '#/components/schemas/NetworkAccessIdentifier' ipv4Address: $ref: '#/components/schemas/DeviceIpv4Addr' ipv6Address: $ref: '#/components/schemas/DeviceIpv6Address' minProperties: 1 NetworkAccessIdentifier: description: A public identifier addressing a subscription in a mobile network. In 3GPP terminology, it corresponds to the GPSI formatted with the External Identifier ({Local Identifier}@{Domain Identifier}). Unlike the telephone number, the network access identifier is not subjected to portability ruling in force, and is individually managed by each operator. type: string example: 123456789@domain.com parameters: x-correlator: name: x-correlator in: header description: Correlation id for the different services schema: type: string SubscriptionId: name: subscriptionId in: path description: Subscription identifier that was obtained from the create event subscription operation required: true schema: $ref: '#/components/schemas/SubscriptionId' examples: CIRCLE_AREA_ENTERED: description: The cloud event when a geofence area was entered value: id: '123655' source: https://notificationSendServer12.supertelco.com type: org.camaraproject.geofencing-subscriptions.v0.area-entered specversion: '1.0' datacontenttype: application/json time: '2023-03-22T05:40:23.682Z' data: subscriptionId: 987654321 device: phoneNumber: 123456789 area: areaType: CIRCLE center: latitude: 50.735851 longitude: 7.10066 radius: 2000 CIRCLE_AREA_LEFT: description: The cloud event when a geofence area was left value: id: '123655' source: https://notificationSendServer12.supertelco.com type: org.camaraproject.geofencing-subscriptions.v0.area-left specversion: '1.0' datacontenttype: application/json time: '2023-03-22T05:40:23.682Z' data: subscriptionId: 987654321 device: phoneNumber: 123456789 area: areaType: CIRCLE center: latitude: 50.735851 longitude: 7.10066 radius: 2000 SUBSCRIPTION_UNPROCESSABLE: description: The cloud event when the subscription process was aborted. value: id: '123655' source: https://notificationSendServer12.supertelco.com type: org.camaraproject.geofencing-subscriptions.v0.subscription-ends specversion: '1.0' datacontenttype: application/json time: '2023-03-22T05:40:23.682Z' data: device: phoneNumber: 123456789 area: areaType: CIRCLE center: latitude: 50.735851 longitude: 7.10066 radius: 2000 terminationReason: SUBSCRIPTION_UNPROCESSABLE terminationDescription: The requested area cannot be covered by the network. SUBSCRIPTION_ENDS: description: The cloud event when a geofence subscription ends value: id: '123655' source: https://notificationSendServer12.supertelco.com type: org.camaraproject.geofencing-subscriptions.v0.subscription-ends specversion: '1.0' datacontenttype: application/json time: '2023-03-22T05:40:23.682Z' data: subscriptionId: 987654321 device: phoneNumber: 123456789 area: areaType: CIRCLE center: latitude: 50.735851 longitude: 7.10066 radius: 2000 terminationReason: SUBSCRIPTION_EXPIRED REQUEST_CIRCLE_AREA_ENTERED: description: A sample geofence for entering for a circle area value: protocol: HTTP sink: https://notificationSendServer12.supertelco.com types: - org.camaraproject.geofencing-subscriptions.v0.area-entered config: subscriptionDetail: device: phoneNumber: '+12345678912' area: areaType: CIRCLE center: latitude: 50.735851 longitude: 7.10066 radius: 2000 initialEvent: true subscriptionMaxEvents: 10 subscriptionExpireTime: '2024-03-22T05:40:58.469Z' headers: x-correlator: description: Correlation id for the different services schema: type: string securitySchemes: openId: description: OpenID Provider Configuration Information. type: openIdConnect openIdConnectUrl: .well-known/openid-configuration externalDocs: description: Product documentation at CAMARA. url: https://github.com/camaraproject/EdgeCloud