{ "openapi": "3.0.0", "x-rapidapi-info": { "apiVersionId": "apiversion_969ae0b0-88c0-4670-9353-9c09d02c076f", "apiId": "api_47e41e89-ab4a-40fa-87de-c528077c9945" }, "x-documentation": { "tutorials": [], "spotlights": [] }, "x-gateways": [], "info": { "title": "Network as Code ", "version": "1.0.0", "description": "Nokia's Network as Code API for programmable networks.", "x-category": "Other", "x-long-description": "Nokia's Network as Code API for programmable networks", "x-website": "", "x-public": true, "x-thumbnail": "https://rapidapi-prod-prodeu-apis.s3.eu-central-1.amazonaws.com/87fa562b-c40b-4a8f-9847-108b8973ce6f.png", "x-version-lifecycle": "active", "x-badges": [], "termsOfService": "https://developer.networkascode.nokia.io/legal/terms-of-service", "x-collections": [] }, "servers": [ { "url": "https://network-as-code.p-eu.rapidapi.com" } ], "tags": [ { "name": "KYC Tenure v0.1" }, { "name": "Device Swap v1.0.0" }, { "name": "Phone number verify", "description": "API operation to verify a phone number received as input. It can be received either in plain text or hashed format." }, { "name": "Device reachability status", "description": "Operations to get the current reachability status of a device" }, { "name": "Device connectivity status", "description": "Operations to get the current connectivity status of a device" }, { "name": "Roaming status retrieval", "description": "Operation to get device roaming status and country information (if roaming) synchronously" }, { "name": "Device roaming status subscription", "description": "Operation to manage event subscription on device roaming status event." }, { "name": "Check Device Swap", "description": "Validate if the SIM of the end-user has been installed in a different device during a past period" }, { "name": "Location Verification v0.2.0" }, { "name": "Geofencing subscriptions", "description": "Operations to manage event subscription on geofencing events for leaving and entering an area" }, { "name": "QoS Sessions v0", "description": "Manage QoS sessions v0" }, { "name": "Device status subscription", "description": "Operation to manage event subscription on device status event (roaming, connectivity)" }, { "name": "Match", "description": "Operations to match a customer identity against the account data bound to their phone number." }, { "name": "Retrieve Status", "description": "Create a request to retrieve the validity status of the data processing" }, { "name": "Phone number share", "description": "API operation to return the phone number associated to the access token." }, { "name": "Quality-of-Service on Demand v1.0.0" }, { "name": "Location retrieval", "description": "Retrieve the location of a device" }, { "name": "Device reachability status subscription", "description": "Operation to manage event subscription on device reachability status event." }, { "name": "location-verification" }, { "name": "Retrieve Device Swap Date", "description": "Receive the last date in which the device of the end-user was swapped" }, { "name": "Fill-in", "description": "Operations to provide information related to a customer identity stored the account data bound to the customer's phone number." }, { "name": "device-attach" }, { "name": "Device Reachability Status Retrieve v1.1.0" }, { "name": "Location Retrieval v0.2.0" }, { "name": "Location Verification v1.0.0" }, { "name": "Check Subscriber Tenure", "description": "Check details about the length of tenure of the subscriber" }, { "name": "Device roaming status", "description": "Operation to get device roaming status and country information (if roaming) synchronously" }, { "name": "Location verification", "description": "Verification of the location of a device" }, { "name": "slice" }, { "name": "Geofencing v0.3.0" }, { "name": "Number Recycling v0.2" }, { "name": "Age Verification", "description": "Operations to verify the age of a user." }, { "name": "KYC Match v0.3" }, { "name": "KYC Age Verification v0.1" }, { "name": "Device Reachability Status Subscriptions v0.8" }, { "name": "Call Forwarding Signal v0.3.0" }, { "name": "location-retrieval" }, { "name": "Number Verification v2.1" }, { "name": "Device Reachability Status Subscriptions v0.7" }, { "name": ".well-known" }, { "name": "passthrough" }, { "name": "device-status" }, { "name": "Network Slicing v1.0.0" }, { "name": "geofencing-subscriptions" }, { "name": "QoS Sessions", "description": "Manage QoS sessions" }, { "name": "Consent Info v0.1.0" }, { "name": "quality-on-demand" }, { "name": "Device Status v0.5.1" }, { "name": "Device Roaming Status Subscriptions v0.7" }, { "name": "congestion-insights" }, { "name": "KYC FIll In v0.4" }, { "name": "qod" }, { "name": "Device Roaming Status Retrieve v1.1.0" }, { "name": "Congestion Insights v1.0.0" }, { "name": "NaC Authorization Server" }, { "name": "Number Verification v1.0.0" }, { "name": "Quality-of-Service on Demand v0.10.1" }, { "name": "Well Known Metadata" }, { "name": "Slice Device Attach v1.0.0" }, { "name": "Device Roaming Status Subscriptions v0.8" }, { "name": "SIM Swap v1.0.0" }, { "name": "oauth2" } ], "paths": { "/quality-on-demand/v1/retrieve-sessions": { "post": { "tags": [ "Quality-of-Service on Demand v1.0.0" ], "summary": "Retrieve sessions for a specific device", "operationId": "retrieveSessions-QoD-V1", "description": "Return all QoD sessions related to the specified device.", "responses": { "200": { "content": { "application/json": { "examples": { "Example_1": { "value": [ { "device": { "phoneNumber": "+123456789", "networkAccessIdentifier": "123456789@domain.com", "ipv4Address": { "publicAddress": "84.125.93.10", "privateAddress": "84.125.93.10", "publicPort": 0 }, "ipv6Address": "2001:db8:85a3:8d3:1319:8a2e:370:7344" }, "applicationServer": { "ipv4Address": "192.168.0.1/24", "ipv6Address": "2001:db8:85a3:8d3:1319:8a2e:370:7344" }, "devicePorts": { "ranges": [ { "from": 0, "to": 0 } ], "ports": [] }, "applicationServerPorts": { "ranges": [ { "from": 0, "to": 0 } ], "ports": [] }, "qosProfile": "QCI_1_voice", "sink": "https://endpoint.example.com/sink", "sinkCredential": { "credentialType": "ACCESSTOKEN" }, "sessionId": "", "duration": 86400, "startedAt": "2024-06-01T12:00:00Z", "expiresAt": "2024-06-01T13:00:00Z", "qosStatus": "REQUESTED", "statusInfo": "DURATION_EXPIRED", "messages": [ { "severity": "INFO", "description": "" } ] } ] } }, "schema": { "items": { "description": "Session related information.", "allOf": [ { "description": "Common attributes of a QoD session", "type": "object", "properties": { "device": { "description": "End-user equipment able to connect to a network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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\n", "type": "object", "properties": { "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": "^\\+?[0-9]{5,15}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n\nThe session shall apply to all IP flows between the device subnet and the specified application server, unless further restricted by the optional parameters devicePorts or applicationServerPorts.\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 }, "applicationServer": { "description": "A server hosting backend applications to deliver some business logic to clients.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n", "type": "object", "properties": { "ipv4Address": { "type": "string", "description": "IPv4 address may be specified in form
as:\n - address - an IPv4 number in dotted-quad form 1.2.3.4. Only this exact IP number will match the flow control rule.\n - address/mask - an IP number as above with a mask width of the form 1.2.3.4/24.\n In this case, all IP numbers from 1.2.3.0 to 1.2.3.255 will match. The bit width MUST be valid for the IP version.\n" }, "ipv6Address": { "type": "string", "description": "IPv6 address may be specified in form
as:\n - address - The /128 subnet is optional for single addresses:\n - 2001:db8:85a3:8d3:1319:8a2e:370:7344\n - 2001:db8:85a3:8d3:1319:8a2e:370:7344/128\n - address/mask - an IP v6 number with a mask:\n - 2001:db8:85a3:8d3::0/64\n - 2001:db8:85a3:8d3::/64\n" } }, "minProperties": 1 }, "devicePorts": { "description": "The ports used locally by the device for flows to which the requested QoS profile should apply. If omitted, then the qosProfile will apply to all flows between the device and the specified application server address and ports", "allOf": [ { "type": "object", "minProperties": 1, "properties": { "ranges": { "type": "array", "minItems": 1, "items": { "type": "object", "required": [ "from", "to" ], "properties": { "from": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 }, "to": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } }, "ports": { "type": "array", "minItems": 1, "items": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } } ] }, "applicationServerPorts": { "description": "A list of single ports or port ranges on the application server", "allOf": [ { "type": "object", "minProperties": 1, "properties": { "ranges": { "type": "array", "minItems": 1, "items": { "type": "object", "required": [ "from", "to" ], "properties": { "from": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 }, "to": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } }, "ports": { "type": "array", "minItems": 1, "items": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } } ] }, "qosProfile": { "description": "A unique name for identifying a specific QoS profile.\nThis may follow different formats depending on the service providers implementation.\nSome options addresses:\n\n\n\n\n\n - A UUID style string\n - Support for predefined profiles QOS_S, QOS_M, QOS_L, and QOS_E\n - A searchable descriptive name\n", "type": "string", "minLength": 3, "maxLength": 256, "format": "string", "pattern": "^[a-zA-Z0-9_.-]+$" }, "sink": { "type": "string", "format": "uri", "description": "The address to which events about all status changes of the session (e.g. session termination) shall be delivered using the selected protocol." }, "sinkCredential": { "description": "A sink credential provides authentication or authorization information necessary to enable delivery of events to a target.", "allOf": [ { "type": "object", "properties": { "credentialType": { "type": "string", "enum": [ "ACCESSTOKEN" ], "description": "The type of the credential.\nNote: Type of the credential - MUST be set to ACCESSTOKEN for now\n" } }, "required": [ "credentialType" ] } ] } }, "required": [ "applicationServer", "qosProfile" ] }, { "type": "object", "properties": { "sessionId": { "description": "Session ID in UUID format", "type": "string", "format": "uuid" }, "duration": { "type": "integer", "format": "int32", "minimum": 1, "maximum": 2147483647 }, "startedAt": { "description": "Date and time when the QoS status became \"AVAILABLE\". Not to be returned when `qosStatus` is \"REQUESTED\". Format must follow RFC 3339 and must indicate time zone (UTC or local).", "type": "string", "format": "date-time" }, "expiresAt": { "description": "Date and time of the QoS session expiration. Format must follow RFC 3339 and must indicate time zone (UTC or local).\n- When `qosStatus` is \"AVAILABLE\", it is the limit time when the session is scheduled to finnish, if not terminated by other means.\n- When `qosStatus` is \"UNAVAILABLE\", it is the time when the session was terminated.\n- Not to be returned when `qosStatus` is \"REQUESTED\".\nWhen the session is extended, the value is the new expiration time of the session.\n", "type": "string", "format": "date-time" }, "qosStatus": { "description": "The current status of the requested QoS session. The status can be one of the following:\n* `REQUESTED` - QoS has been requested by creating a session\n* `AVAILABLE` - The requested QoS has been provided by the network\n* `UNAVAILABLE` - The requested QoS cannot be provided by the network due to some reason\n", "type": "string", "enum": [ "REQUESTED", "AVAILABLE", "UNAVAILABLE" ] }, "statusInfo": { "description": "Reason for the new `qosStatus`. Currently `statusInfo` is only applicable when `qosStatus` is 'UNAVAILABLE'.\n* `DURATION_EXPIRED` - Session terminated due to requested duration expired\n* `NETWORK_TERMINATED` - Network terminated the session before the requested duration expired\n* `DELETE_REQUESTED`- User requested the deletion of the session before the requested duration expired\n", "type": "string", "enum": [ "DURATION_EXPIRED", "NETWORK_TERMINATED", "DELETE_REQUESTED" ] }, "messages": { "type": "array", "items": { "type": "object", "properties": { "severity": { "description": "Message severity", "type": "string", "enum": [ "INFO", "WARNING" ] }, "description": { "description": "Detailed message text", "type": "string" } }, "required": [ "severity", "description" ] } } }, "required": [ "sessionId", "duration", "qosStatus" ] } ] }, "type": "array", "title": "Response Retrievesessions" } } }, "description": "" }, "422": { "content": { "application/json": { "examples": { "Example_1": { "value": { "detail": [ { "loc": [], "msg": "", "type": "" } ] } } }, "schema": { "properties": { "detail": { "items": { "properties": { "loc": { "items": { "anyOf": [ { "type": "string" }, { "type": "integer" } ] }, "type": "array", "title": "Location" }, "msg": { "type": "string", "title": "Message" }, "type": { "type": "string", "title": "Error Type" } }, "type": "object", "required": [ "loc", "msg", "type" ], "title": "ValidationError" }, "type": "array", "title": "Detail" } }, "type": "object", "title": "HTTPValidationError" } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "QOS_RETRIEVE_SESSION_PHONE_NUMBER": { "value": { "device": { "phoneNumber": "+99999991001" } } } }, "schema": { "properties": { "device": { "description": "End-user equipment able to connect to a network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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\n", "type": "object", "properties": { "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": "^\\+?[0-9]{5,15}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n\nThe session shall apply to all IP flows between the device subnet and the specified application server, unless further restricted by the optional parameters devicePorts or applicationServerPorts.\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 } }, "type": "object", "required": [ "device" ], "title": "RetrieveSessionInput" } } }, "description": "" }, "parameters": [ { "$ref": "#/components/parameters/x-rapidapi-host" } ] } }, "/device-status/device-roaming-status-subscriptions/v0.8/subscriptions/{subscriptionId}": { "get": { "tags": [ "Device Roaming Status Subscriptions v0.8" ], "summary": "Retrieve a roaming status event subscription for a device", "parameters": [ { "name": "subscriptionId", "in": "path", "required": true, "description": "Subscription identifier that was obtained from the create event subscription operation", "schema": { "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.", "default": "qs15-h556-rt89-1298" } }, { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": {} }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "retrieveDeviceRoamingStatusSubscription-DS-ROS-V080", "description": "retrieve device roaming status subscription information for a given subscription.", "responses": { "200": { "content": { "application/json": { "examples": { "Active Subscription": { "value": { "id": "550e8400-e29b-41d4-a716-446655440000", "sink": "https://endpoint.example.com/sink", "protocol": "HTTP", "types": [ "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-on" ], "config": { "subscriptionDetail": {}, "subscriptionExpireTime": "2024-07-17T13:18:23.682Z", "subscriptionMaxEvents": 5, "initialEvent": true }, "startsAt": "2024-07-03T21:12:02.871Z", "expiresAt": "2024-07-03T21:12:02.871Z", "status": "ACTIVE" } }, "Active Subscription With Device Disambiguation": { "value": { "id": "550e8400-e29b-41d4-a716-446655440000", "sink": "https://endpoint.example.com/sink", "protocol": "HTTP", "types": [ "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-on" ], "config": { "subscriptionDetail": { "device": { "phoneNumber": "+99999991000" } }, "subscriptionExpireTime": "2024-07-17T13:18:23.682Z", "subscriptionMaxEvents": 5, "initialEvent": true }, "startsAt": "2024-07-03T21:12:02.871Z", "expiresAt": "2024-07-03T21:12:02.871Z", "status": "ACTIVE" } }, "Subscription Activation Requested": { "value": { "id": "550e8400-e29b-41d4-a716-446655440000", "sink": "https://endpoint.example.com/sink", "protocol": "HTTP", "types": [ "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-on" ], "config": { "subscriptionDetail": {}, "subscriptionExpireTime": "2024-07-17T13:18:23.682Z", "subscriptionMaxEvents": 5, "initialEvent": true }, "startsAt": "2024-07-03T21:12:02.871Z", "expiresAt": "2024-07-03T21:12:02.871Z", "status": "ACTIVATION_REQUESTED" } }, "Subscription Deleted": { "value": { "id": "550e8400-e29b-41d4-a716-446655440000", "sink": "https://endpoint.example.com/sink", "protocol": "HTTP", "types": [ "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-on" ], "config": { "subscriptionDetail": {}, "subscriptionExpireTime": "2024-07-17T13:18:23.682Z", "subscriptionMaxEvents": 5, "initialEvent": true }, "startsAt": "2024-07-03T21:12:02.871Z", "expiresAt": "2024-07-03T21:12:02.871Z", "status": "DELETED" } } }, "schema": { "description": "Represents a event-type subscription.", "type": "object", "required": [ "sink", "protocol", "config", "types", "id" ], "properties": { "protocol": { "type": "string", "enum": [ "HTTP", "MQTT3", "MQTT5", "AMQP", "NATS", "KAFKA" ], "description": "Identifier of a delivery protocol. Only HTTP is allowed for now" }, "sink": { "type": "string", "format": "uri", "pattern": "^https:\\/\\/.+$", "description": "The address to which events shall be delivered using the selected protocol." }, "types": { "description": "Camara Event types eligible to be delivered by this subscription.\nNote: for the Commonalities meta-release v0.4 we enforce to have only event type per subscription then for following meta-release use of array MUST be decided\n\n\n\n\n\n at API project level.\n", "type": "array", "minItems": 1, "maxItems": 1, "items": { "type": "string", "description": "roaming-status - Event triggered when the device switch from roaming ON to roaming OFF and conversely\n\nroaming-on - Event triggered when the device switch from roaming OFF to roaming ON\n\nroaming-off - Event triggered when the device switch from roaming ON to roaming OFF\n\nroaming-change-country - Event triggered when the device in roaming change country code\n", "enum": [ "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-status", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-on", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-off", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-change-country" ] } }, "config": { "description": "Implementation-specific configuration parameters needed by the subscription manager for acquiring events.\nIn CAMARA we have predefined attributes like `subscriptionExpireTime`, `subscriptionMaxEvents`, `initialEvent`\nSpecific event type attributes must be defined in `subscriptionDetail`\nNote: if a request is performed for several event type, all subscribed event will use same `config` parameters.\n", "type": "object", "required": [ "subscriptionDetail" ], "properties": { "subscriptionDetail": { "description": "The detail of the requested event subscription.", "type": "object", "properties": { "device": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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.\n", "type": "object", "properties": { "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}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 } } }, "subscriptionExpireTime": { "type": "string", "format": "date-time", "description": "The subscription expiration time (in date-time format) requested by the API consumer. It must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone." }, "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 }, "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.\nExample: Consumer request Roaming event. If consumer sets initialEvent to true and device is in roaming situation, an event is triggered.\n" } } }, "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." }, "startsAt": { "type": "string", "format": "date-time", "description": "Date when the event subscription will begin/began\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\n" }, "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.\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\n" }, "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\n\n\n\n\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" ] } } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "GENERIC_400_INVALID_ARGUMENT": { "description": "Invalid Argument. Generic Syntax Exception", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param." } }, "GENERIC_400_SUBSCRIPTION_ID_REQUIRED": { "description": "subscription id is required", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Expected property is missing: subscriptionId" } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 400 ] }, "code": { "enum": [ "INVALID_ARGUMENT" ] } } } ] } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "GENERIC_401_UNAUTHENTICATED": { "description": "Request cannot be authenticated and a new authentication is required", "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials. A new authentication is required." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 401 ] }, "code": { "enum": [ "UNAUTHENTICATED" ] } } } ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "GENERIC_403_PERMISSION_DENIED": { "description": "Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security", "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 403 ] }, "code": { "enum": [ "PERMISSION_DENIED" ] } } } ] } } }, "description": "" }, "404": { "content": { "application/json": { "examples": { "GENERIC_404_NOT_FOUND": { "description": "Resource is not found", "value": { "status": 404, "code": "NOT_FOUND", "message": "The specified resource is not found." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 404 ] }, "code": { "enum": [ "NOT_FOUND" ] } } } ] } } }, "description": "" } } }, "delete": { "tags": [ "Device Roaming Status Subscriptions v0.8" ], "summary": "Delete a device-roaming-status event subscription for a device", "parameters": [ { "name": "subscriptionId", "in": "path", "required": true, "description": "Subscription identifier that was obtained from the create event subscription operation", "schema": { "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.", "default": "qs15-h556-rt89-1298" } }, { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": {} }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "deleteDeviceRoamingStatusSubscription-DS-ROS-V080", "description": "Delete a given device-roaming-status subscription by ID", "responses": { "202": { "content": { "application/json": { "examples": { "Example_1": { "value": { "id": "qs15-h556-rt89-1298" } } }, "schema": { "description": "Response for a device reachability status operation managed asynchronously (Creation or Deletion)", "type": "object", "required": [ "id" ], "properties": { "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." } } } } }, "description": "" }, "204": { "content": { "application/json": { "examples": { "Example_1": { "value": {} } }, "schema": {} } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "GENERIC_400_INVALID_ARGUMENT": { "description": "Invalid Argument. Generic Syntax Exception", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param." } }, "GENERIC_400_SUBSCRIPTION_ID_REQUIRED": { "description": "subscription id is required", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Expected property is missing: subscriptionId" } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 400 ] }, "code": { "enum": [ "INVALID_ARGUMENT" ] } } } ] } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "GENERIC_401_UNAUTHENTICATED": { "description": "Request cannot be authenticated and a new authentication is required", "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials. A new authentication is required." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 401 ] }, "code": { "enum": [ "UNAUTHENTICATED" ] } } } ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "GENERIC_403_PERMISSION_DENIED": { "description": "Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security", "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 403 ] }, "code": { "enum": [ "PERMISSION_DENIED" ] } } } ] } } }, "description": "" }, "404": { "content": { "application/json": { "examples": { "GENERIC_404_NOT_FOUND": { "description": "Resource is not found", "value": { "status": 404, "code": "NOT_FOUND", "message": "The specified resource is not found." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 404 ] }, "code": { "enum": [ "NOT_FOUND" ] } } } ] } } }, "description": "" } } } }, "/oauth2/v1/apps/{nac_app_ref}/.well-known/jwks.json": { "get": { "tags": [ "NaC Authorization Server" ], "summary": "Get JWKS for an app.", "parameters": [ { "name": "nac_app_ref", "in": "path", "required": true, "schema": { "type": "string", "title": "Nac App Ref" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "get_jwks_apps__nac_app_ref___well_known_jwks_json_get", "description": " ", "responses": { "200": { "content": { "application/json": { "examples": { "Example_1": { "value": {} } }, "schema": {} } }, "description": "" }, "422": { "content": { "application/json": { "examples": { "Example_1": { "value": { "detail": [ { "loc": [], "msg": "", "type": "" } ] } } }, "schema": { "properties": { "detail": { "items": { "properties": { "loc": { "type": "array", "items": { "type": "string" }, "title": "Location" }, "msg": { "type": "string", "title": "Message" }, "type": { "type": "string", "title": "Error Type" } }, "type": "object", "required": [ "loc", "msg", "type" ], "title": "ValidationError" }, "type": "array", "title": "Detail" } }, "type": "object", "title": "HTTPValidationError" } } }, "description": "" } } } }, "/device-status/v0/connectivity": { "post": { "tags": [ "Device Status v0.5.1" ], "summary": "Get the current connectivity status information", "operationId": "getConnectivityStatus", "description": "Get the current connectivity status information", "responses": { "200": { "content": { "application/json": { "examples": { "Connected-With-DATA": { "value": { "connectivityStatus": "CONNECTED_DATA" } }, "Connected-With-SMS": { "value": { "connectivityStatus": "CONNECTED_SMS" } }, "Not-Connected": { "value": { "connectivityStatus": "NOT_CONNECTED" } } }, "schema": { "type": "object", "required": [ "connectivityStatus" ], "properties": { "connectivityStatus": { "description": "CONNECTED_DATA: The device is connected to the network for Data usage\n\nCONNECTED_SMS: The device is connected to the network for SMS usage\n\nNOT_CONNECTED: The device is not connected\n", "type": "string", "enum": [ "CONNECTED_DATA", "CONNECTED_SMS", "NOT_CONNECTED" ] } } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param" } } }, "schema": { "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" } } } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials" } } }, "schema": { "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" } } } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action" } } }, "schema": { "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" } } } } }, "description": "" }, "404": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 404, "code": "NOT_FOUND", "message": "The specified resource is not found" } } }, "schema": { "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" } } } } }, "description": "" }, "500": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 500, "code": "INTERNAL", "message": "Server error" } } }, "schema": { "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" } } } } }, "description": "" }, "503": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 503, "code": "UNAVAILABLE", "message": "Service unavailable" } } }, "schema": { "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" } } } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "CONNECTED_SMS_PHONE_NUMBER": { "value": { "device": { "phoneNumber": "+99999991000" } } }, "CONNECTED_DATA_PHONE_NUMBER": { "value": { "device": { "phoneNumber": "+99999991001" } } }, "NOT_CONNECTED_PHONE_NUMBER": { "value": { "device": { "phoneNumber": "+99999991002" } } } }, "schema": { "type": "object", "properties": { "device": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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.\n", "type": "object", "properties": { "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, optionally prefixed with '+'.", "type": "string", "pattern": "^\\+?[0-9]{5,15}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 } }, "required": [ "device" ] } } }, "description": "" }, "parameters": [ { "$ref": "#/components/parameters/x-rapidapi-host" } ] } }, "/device-status/device-reachability-status-subscriptions/v0.7/subscriptions/{subscriptionId}": { "delete": { "tags": [ "Device Reachability Status Subscriptions v0.7" ], "summary": "Delete a device reachability status event subscription for a device", "parameters": [ { "name": "subscriptionId", "in": "path", "required": true, "description": "Subscription identifier that was obtained from the create event subscription operation", "schema": { "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/r2.3/documentation/API-design-guidelines.md#122-event-notification).", "default": "qs15-h556-rt89-1298" } }, { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": { "type": "string", "pattern": "^[a-zA-Z0-9-]{0,55}$", "default": "b4333c46-49c0-4f62-80d7-f0ef930f1c46" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "deleteDeviceReachabilityStatusSubscription", "description": "Delete a given subscription by ID", "responses": { "202": { "content": { "application/json": { "examples": { "Example_1": { "value": { "id": "qs15-h556-rt89-1298" } } }, "schema": { "description": "Response for a device reachability status operation managed asynchronously (Creation or Deletion)", "type": "object", "properties": { "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/r2.3/documentation/API-design-guidelines.md#122-event-notification)." } } } } }, "description": "" }, "204": { "content": { "application/json": { "examples": { "Example_1": { "value": {} } }, "schema": {} } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "GENERIC_400_INVALID_ARGUMENT": { "description": "Invalid Argument. Generic Syntax Exception", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param." } }, "GENERIC_400_SUBSCRIPTION_ID_REQUIRED": { "description": "subscription id is required", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Expected property is missing: subscriptionId" } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 400 ] }, "code": { "enum": [ "INVALID_ARGUMENT" ] } } } ] } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "GENERIC_401_UNAUTHENTICATED": { "description": "Request cannot be authenticated", "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials." } }, "GENERIC_401_AUTHENTICATION_REQUIRED": { "description": "New authentication is needed, authentication is no longer valid", "value": { "status": 401, "code": "AUTHENTICATION_REQUIRED", "message": "New authentication is required." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 401 ] }, "code": { "enum": [ "UNAUTHENTICATED", "AUTHENTICATION_REQUIRED" ] } } } ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "GENERIC_403_PERMISSION_DENIED": { "description": "Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security", "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 403 ] }, "code": { "enum": [ "PERMISSION_DENIED" ] } } } ] } } }, "description": "" }, "404": { "content": { "application/json": { "examples": { "GENERIC_404_NOT_FOUND": { "description": "Resource is not found", "value": { "status": 404, "code": "NOT_FOUND", "message": "The specified resource is not found." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 404 ] }, "code": { "enum": [ "NOT_FOUND" ] } } } ] } } }, "description": "" } } }, "get": { "tags": [ "Device Reachability Status Subscriptions v0.7" ], "summary": "Retrieve a device reachability status event subscription for a device", "parameters": [ { "name": "subscriptionId", "in": "path", "required": true, "description": "Subscription identifier that was obtained from the create event subscription operation", "schema": { "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/r2.3/documentation/API-design-guidelines.md#122-event-notification).", "default": "qs15-h556-rt89-1298" } }, { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": { "type": "string", "pattern": "^[a-zA-Z0-9-]{0,55}$", "default": "b4333c46-49c0-4f62-80d7-f0ef930f1c46" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "retrieveDeviceReachabilityStatusSubscription", "description": "Retrieve a given subscription by ID", "responses": { "200": { "content": { "application/json": { "examples": { "subscription-activation-requested": { "value": { "id": "550e8400-e29b-41d4-a716-446655440000", "sink": "https://endpoint.example.com/sink", "protocol": "HTTP", "types": [ "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-data" ], "config": { "subscriptionDetail": { "device": { "phoneNumber": "+99999991000" } }, "subscriptionExpireTime": "2024-07-17T13:18:23.682Z", "subscriptionMaxEvents": 5, "initialEvent": true }, "startsAt": "2024-07-03T21:12:02.871Z", "expiresAt": "2024-07-03T21:12:02.871Z", "status": "ACTIVATION_REQUESTED" } }, "subscription-deleted": { "value": { "id": "550e8400-e29b-41d4-a716-446655440000", "sink": "https://endpoint.example.com/sink", "protocol": "HTTP", "types": [ "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-data" ], "config": { "subscriptionDetail": { "device": { "phoneNumber": "+99999991000" } }, "subscriptionExpireTime": "2024-07-17T13:18:23.682Z", "subscriptionMaxEvents": 5, "initialEvent": true }, "startsAt": "2024-07-03T21:12:02.871Z", "expiresAt": "2024-07-03T21:12:02.871Z", "status": "DELETED" } }, "subscription-active": { "value": { "id": "550e8400-e29b-41d4-a716-446655440000", "sink": "https://endpoint.example.com/sink", "protocol": "HTTP", "types": [ "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-data" ], "config": { "subscriptionDetail": { "device": { "phoneNumber": "+99999991000" } }, "subscriptionExpireTime": "2024-07-17T13:18:23.682Z", "subscriptionMaxEvents": 5, "initialEvent": true }, "startsAt": "2024-07-03T21:12:02.871Z", "expiresAt": "2024-07-03T21:12:02.871Z", "status": "ACTIVE" } } }, "schema": { "description": "Represents a event-type subscription.", "type": "object", "required": [ "sink", "protocol", "config", "types", "id" ], "properties": { "protocol": { "type": "string", "enum": [ "HTTP", "MQTT3", "MQTT5", "AMQP", "NATS", "KAFKA" ], "description": "Identifier of a delivery protocol. Only HTTP is allowed for now" }, "sink": { "type": "string", "format": "url", "description": "The address to which events shall be delivered using the selected protocol." }, "types": { "description": "Camara Event types eligible to be delivered by this subscription.\nNote: For the current Commonalities API design guidelines, only one event type per subscription is allowed\n", "type": "array", "minItems": 1, "maxItems": 1, "items": { "type": "string", "description": "reachability-data - Event triggered when the device is connected to the network for Data usage (regardless of the SMS reachability).\n\nreachability-sms - Event triggered when the device is connected to the network only for SMS usage\n\nreachability-disconnected - Event triggered when the device is not connected.\n", "enum": [ "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-data", "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-sms", "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-disconnected" ] } }, "config": { "description": "Implementation-specific configuration parameters needed by the subscription manager for acquiring events.\nIn CAMARA we have predefined attributes like `subscriptionExpireTime`, `subscriptionMaxEvents`, `initialEvent`\nSpecific event type attributes must be defined in `subscriptionDetail`\nNote: if a request is performed for several event type, all subscribed event will use same `config` parameters.\n", "type": "object", "required": [ "subscriptionDetail" ], "properties": { "subscriptionDetail": { "description": "The detail of the requested event subscription.", "type": "object", "properties": { "device": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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.\n", "type": "object", "properties": { "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}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 } } }, "subscriptionExpireTime": { "type": "string", "format": "date-time", "description": "The subscription expiration time (in date-time format) requested by the API consumer. Up to API project decision to keep it." }, "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. Up to API project decision to keep it.", "minimum": 1 }, "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.Up to API project decision to keep it.\nExample: Consumer subscribes to reachability SMS. If consumer sets initialEvent to true and device is already reachable by SMS, an event is triggered.\n" } } }, "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/r2.3/documentation/API-design-guidelines.md#122-event-notification)." }, "startsAt": { "type": "string", "format": "date-time", "description": "Date when the event subscription will begin/began\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\nRecommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)\n" }, "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.\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\nRecommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)\n" }, "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\n\n\n\n\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" ] } } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "GENERIC_400_INVALID_ARGUMENT": { "description": "Invalid Argument. Generic Syntax Exception", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param." } }, "GENERIC_400_SUBSCRIPTION_ID_REQUIRED": { "description": "subscription id is required", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Expected property is missing: subscriptionId" } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 400 ] }, "code": { "enum": [ "INVALID_ARGUMENT" ] } } } ] } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "GENERIC_401_AUTHENTICATION_REQUIRED": { "description": "New authentication is needed, authentication is no longer valid", "value": { "status": 401, "code": "AUTHENTICATION_REQUIRED", "message": "New authentication is required." } }, "GENERIC_401_UNAUTHENTICATED": { "description": "Request cannot be authenticated", "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 401 ] }, "code": { "enum": [ "UNAUTHENTICATED", "AUTHENTICATION_REQUIRED" ] } } } ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "GENERIC_403_PERMISSION_DENIED": { "description": "Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security", "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 403 ] }, "code": { "enum": [ "PERMISSION_DENIED" ] } } } ] } } }, "description": "" }, "404": { "content": { "application/json": { "examples": { "GENERIC_404_NOT_FOUND": { "description": "Resource is not found", "value": { "status": 404, "code": "NOT_FOUND", "message": "The specified resource is not found." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 404 ] }, "code": { "enum": [ "NOT_FOUND" ] } } } ] } } }, "description": "" } } } }, "/device-status/device-reachability-status-subscriptions/v0.7/subscriptions": { "get": { "tags": [ "Device Reachability Status Subscriptions v0.7" ], "summary": "Retrieve a list of device reachability status event subscription", "parameters": [ { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": { "type": "string", "pattern": "^[a-zA-Z0-9-]{0,55}$", "default": "b4333c46-49c0-4f62-80d7-f0ef930f1c46" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "retrieveDeviceReachabilityStatusSubscriptionList", "description": "Retrieve a list of device reachability status event subscription(s)", "responses": { "200": { "content": { "application/json": { "examples": { "Example_1": { "value": [ { "protocol": "HTTP", "sink": "https://endpoint.example.com/sink", "types": [ "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-data" ], "config": { "subscriptionDetail": { "device": { "phoneNumber": "+99999991000", "networkAccessIdentifier": "123456789@domain.com", "ipv4Address": { "publicAddress": "84.125.93.10", "privateAddress": "84.125.93.10", "publicPort": 0 }, "ipv6Address": "2001:db8:85a3:8d3:1319:8a2e:370:7344" } }, "subscriptionExpireTime": "2023-01-17T13:18:23.682Z", "subscriptionMaxEvents": 5, "initialEvent": true }, "id": "qs15-h556-rt89-1298", "startsAt": "2023-07-03T12:27:08.312Z", "expiresAt": "2023-07-03T12:27:08.312Z", "status": "ACTIVATION_REQUESTED" } ] } }, "schema": { "type": "array", "minItems": 0, "items": { "description": "Represents a event-type subscription.", "type": "object", "required": [ "sink", "protocol", "config", "types", "id" ], "properties": { "protocol": { "type": "string", "enum": [ "HTTP", "MQTT3", "MQTT5", "AMQP", "NATS", "KAFKA" ], "description": "Identifier of a delivery protocol. Only HTTP is allowed for now" }, "sink": { "type": "string", "format": "url", "description": "The address to which events shall be delivered using the selected protocol." }, "types": { "description": "Camara Event types eligible to be delivered by this subscription.\nNote: For the current Commonalities API design guidelines, only one event type per subscription is allowed\n", "type": "array", "minItems": 1, "maxItems": 1, "items": { "type": "string", "description": "reachability-data - Event triggered when the device is connected to the network for Data usage (regardless of the SMS reachability).\n\nreachability-sms - Event triggered when the device is connected to the network only for SMS usage\n\nreachability-disconnected - Event triggered when the device is not connected.\n", "enum": [ "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-data", "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-sms", "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-disconnected" ] } }, "config": { "description": "Implementation-specific configuration parameters needed by the subscription manager for acquiring events.\nIn CAMARA we have predefined attributes like `subscriptionExpireTime`, `subscriptionMaxEvents`, `initialEvent`\nSpecific event type attributes must be defined in `subscriptionDetail`\nNote: if a request is performed for several event type, all subscribed event will use same `config` parameters.\n", "type": "object", "required": [ "subscriptionDetail" ], "properties": { "subscriptionDetail": { "description": "The detail of the requested event subscription.", "type": "object", "properties": { "device": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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.\n", "type": "object", "properties": { "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}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 } } }, "subscriptionExpireTime": { "type": "string", "format": "date-time", "description": "The subscription expiration time (in date-time format) requested by the API consumer. Up to API project decision to keep it." }, "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. Up to API project decision to keep it.", "minimum": 1 }, "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.Up to API project decision to keep it.\nExample: Consumer subscribes to reachability SMS. If consumer sets initialEvent to true and device is already reachable by SMS, an event is triggered.\n" } } }, "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/r2.3/documentation/API-design-guidelines.md#122-event-notification)." }, "startsAt": { "type": "string", "format": "date-time", "description": "Date when the event subscription will begin/began\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\nRecommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)\n" }, "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.\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\nRecommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)\n" }, "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\n\n\n\n\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" ] } } } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "GENERIC_400_INVALID_ARGUMENT": { "description": "Invalid Argument. Generic Syntax Exception", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 400 ] }, "code": { "enum": [ "INVALID_ARGUMENT" ] } } } ] } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "GENERIC_401_AUTHENTICATION_REQUIRED": { "description": "New authentication is needed, authentication is no longer valid", "value": { "status": 401, "code": "AUTHENTICATION_REQUIRED", "message": "New authentication is required." } }, "GENERIC_401_UNAUTHENTICATED": { "description": "Request cannot be authenticated", "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 401 ] }, "code": { "enum": [ "UNAUTHENTICATED", "AUTHENTICATION_REQUIRED" ] } } } ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "GENERIC_403_PERMISSION_DENIED": { "description": "Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security", "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 403 ] }, "code": { "enum": [ "PERMISSION_DENIED" ] } } } ] } } }, "description": "" } } }, "post": { "tags": [ "Device Reachability Status Subscriptions v0.7" ], "summary": "Create a device reachability status event subscription for a device", "parameters": [ { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": { "type": "string", "pattern": "^[a-zA-Z0-9-]{0,55}$", "default": "b4333c46-49c0-4f62-80d7-f0ef930f1c46" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "createDeviceReachabilityStatusSubscription", "description": "Create a device reachability status event subscription for a device", "responses": { "201": { "content": { "application/json": { "examples": { "subscription-active": { "value": { "id": "550e8400-e29b-41d4-a716-446655440000", "sink": "https://endpoint.example.com/sink", "protocol": "HTTP", "types": [ "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-data" ], "config": { "subscriptionDetail": { "device": { "phoneNumber": "+99999991000" } }, "subscriptionExpireTime": "2024-07-17T13:18:23.682Z", "subscriptionMaxEvents": 5, "initialEvent": true }, "startsAt": "2024-07-03T21:12:02.871Z", "expiresAt": "2024-07-03T21:12:02.871Z", "status": "ACTIVE" } } }, "schema": { "description": "Represents a event-type subscription.", "type": "object", "required": [ "sink", "protocol", "config", "types", "id" ], "properties": { "protocol": { "type": "string", "enum": [ "HTTP", "MQTT3", "MQTT5", "AMQP", "NATS", "KAFKA" ], "description": "Identifier of a delivery protocol. Only HTTP is allowed for now" }, "sink": { "type": "string", "format": "url", "description": "The address to which events shall be delivered using the selected protocol." }, "types": { "description": "Camara Event types eligible to be delivered by this subscription.\nNote: For the current Commonalities API design guidelines, only one event type per subscription is allowed\n", "type": "array", "minItems": 1, "maxItems": 1, "items": { "type": "string", "description": "reachability-data - Event triggered when the device is connected to the network for Data usage (regardless of the SMS reachability).\n\nreachability-sms - Event triggered when the device is connected to the network only for SMS usage\n\nreachability-disconnected - Event triggered when the device is not connected.\n", "enum": [ "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-data", "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-sms", "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-disconnected" ] } }, "config": { "description": "Implementation-specific configuration parameters needed by the subscription manager for acquiring events.\nIn CAMARA we have predefined attributes like `subscriptionExpireTime`, `subscriptionMaxEvents`, `initialEvent`\nSpecific event type attributes must be defined in `subscriptionDetail`\nNote: if a request is performed for several event type, all subscribed event will use same `config` parameters.\n", "type": "object", "required": [ "subscriptionDetail" ], "properties": { "subscriptionDetail": { "description": "The detail of the requested event subscription.", "type": "object", "properties": { "device": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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.\n", "type": "object", "properties": { "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}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 } } }, "subscriptionExpireTime": { "type": "string", "format": "date-time", "description": "The subscription expiration time (in date-time format) requested by the API consumer. Up to API project decision to keep it." }, "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. Up to API project decision to keep it.", "minimum": 1 }, "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.Up to API project decision to keep it.\nExample: Consumer subscribes to reachability SMS. If consumer sets initialEvent to true and device is already reachable by SMS, an event is triggered.\n" } } }, "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/r2.3/documentation/API-design-guidelines.md#122-event-notification)." }, "startsAt": { "type": "string", "format": "date-time", "description": "Date when the event subscription will begin/began\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\nRecommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)\n" }, "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.\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\nRecommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)\n" }, "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\n\n\n\n\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" ] } } } } }, "description": "" }, "202": { "content": { "application/json": { "examples": { "Example_1": { "value": { "id": "qs15-h556-rt89-1298" } } }, "schema": { "description": "Response for a device reachability status operation managed asynchronously (Creation or Deletion)", "type": "object", "properties": { "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/r2.3/documentation/API-design-guidelines.md#122-event-notification)." } } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "GENERIC_400_INVALID_PROTOCOL": { "description": "Invalid protocol for events subscription management", "value": { "status": 400, "code": "INVALID_PROTOCOL", "message": "Only HTTP is supported" } }, "GENERIC_400_INVALID_TOKEN": { "description": "Invalid token type for sink credential of type ACCESSTOKEN", "value": { "status": 400, "code": "INVALID_TOKEN", "message": "Only bearer token is supported" } }, "GENERIC_400_OUT_OF_RANGE": { "description": "Out of Range. Specific Syntax Exception used when a given field has a pre-defined range or a invalid filter criteria combination is requested", "value": { "status": 400, "code": "OUT_OF_RANGE", "message": "Client specified an invalid range." } }, "GENERIC_400_INVALID_ARGUMENT": { "description": "Invalid Argument. Generic Syntax Exception", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param." } }, "GENERIC_400_INVALID_CREDENTIAL": { "description": "Invalid sink credential type", "value": { "status": 400, "code": "INVALID_CREDENTIAL", "message": "Only Access token is supported" } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 400 ] }, "code": { "enum": [ "INVALID_ARGUMENT", "OUT_OF_RANGE", "INVALID_PROTOCOL", "INVALID_CREDENTIAL", "INVALID_TOKEN" ] } } } ] } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "GENERIC_401_AUTHENTICATION_REQUIRED": { "description": "New authentication is needed, authentication is no longer valid", "value": { "status": 401, "code": "AUTHENTICATION_REQUIRED", "message": "New authentication is required." } }, "GENERIC_401_UNAUTHENTICATED": { "description": "Request cannot be authenticated", "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 401 ] }, "code": { "enum": [ "UNAUTHENTICATED", "AUTHENTICATION_REQUIRED" ] } } } ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "GENERIC_403_PERMISSION_DENIED": { "description": "Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security", "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action." } }, "GENERIC_403_SUBSCRIPTION_MISMATCH": { "description": "Inconsistent access token for requested subscription", "value": { "status": 403, "code": "SUBSCRIPTION_MISMATCH", "message": "Inconsistent access token for requested events subscription" } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 403 ] }, "code": { "enum": [ "PERMISSION_DENIED", "SUBSCRIPTION_MISMATCH" ] } } } ] } } }, "description": "" }, "409": { "content": { "application/json": { "examples": { "GENERIC_409_ABORTED": { "description": "Concurreny of processes of the same nature/scope", "value": { "status": 409, "code": "ABORTED", "message": "Concurrency conflict." } }, "GENERIC_409_ALREADY_EXISTS": { "description": "Trying to create an existing resource", "value": { "status": 409, "code": "ALREADY_EXISTS", "message": "The resource that a client tried to create already exists." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 409 ] }, "code": { "enum": [ "ABORTED", "ALREADY_EXISTS" ] } } } ] } } }, "description": "" }, "422": { "content": { "application/json": { "examples": { "GENERIC_422_IDENTIFIER_MISMATCH": { "description": "Inconsistency between identifiers not pointing to the same device", "value": { "status": 422, "code": "IDENTIFIER_MISMATCH", "message": "Provided identifiers are not consistent." } }, "GENERIC_422_UNSUPPORTED_IDENTIFIER": { "description": "None of the provided identifiers is supported by the implementation", "value": { "status": 422, "code": "UNSUPPORTED_IDENTIFIER", "message": "The identifier provided is not supported." } }, "GENERIC_422_SERVICE_NOT_APPLICABLE": { "description": "Service not applicable for the provided identifier", "value": { "status": 422, "code": "SERVICE_NOT_APPLICABLE", "message": "The service is not available for the provided identifier." } }, "GENERIC_422_UNNECESSARY_IDENTIFIER": { "description": "An explicit identifier is provided when a device or phone number has already been identified from the access token", "value": { "status": 422, "code": "UNNECESSARY_IDENTIFIER", "message": "The device is already identified by the access token." } }, "GENERIC_422_MISSING_IDENTIFIER": { "description": "An identifier is not included in the request and the device or phone number identification cannot be derived from the 3-legged access token", "value": { "status": 422, "code": "MISSING_IDENTIFIER", "message": "The device cannot be identified." } }, "GENERIC_422_MULTIEVENT_SUBSCRIPTION_NOT_SUPPORTED": { "description": "Multi event types subscription is not supported", "value": { "status": 422, "code": "MULTIEVENT_SUBSCRIPTION_NOT_SUPPORTED", "message": "Multi event types subscription not managed" } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 422 ] }, "code": { "enum": [ "IDENTIFIER_MISMATCH", "SERVICE_NOT_APPLICABLE", "MISSING_IDENTIFIER", "UNSUPPORTED_IDENTIFIER", "UNNECESSARY_IDENTIFIER", "MULTIEVENT_SUBSCRIPTION_NOT_SUPPORTED" ] } } } ] } } }, "description": "" }, "429": { "content": { "application/json": { "examples": { "GENERIC_429_QUOTA_EXCEEDED": { "description": "Request is rejected due to exceeding a business quota limit", "value": { "status": 429, "code": "QUOTA_EXCEEDED", "message": "Out of resource quota." } }, "GENERIC_429_TOO_MANY_REQUESTS": { "description": "Access to the API has been temporarily blocked due to rate or spike arrest limits being reached", "value": { "status": 429, "code": "TOO_MANY_REQUESTS", "message": "Rate limit reached." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 429 ] }, "code": { "enum": [ "QUOTA_EXCEEDED", "TOO_MANY_REQUESTS" ] } } } ] } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "Create Reachability Data Subscription": { "value": { "sink": "https://endpoint.example.com/sink", "protocol": "HTTP", "types": [ "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-data" ], "config": { "subscriptionDetail": { "device": { "phoneNumber": "+99999991000" } }, "subscriptionMaxEvents": 5, "initialEvent": true } } }, "Create Reachability SMS Subscription": { "value": { "sink": "https://endpoint.example.com/sink", "protocol": "HTTP", "types": [ "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-sms" ], "config": { "subscriptionDetail": { "device": { "phoneNumber": "+99999991000" } }, "subscriptionMaxEvents": 5, "initialEvent": true } } }, "Create Reachability Disconnected Subscription": { "value": { "sink": "https://endpoint.example.com/sink", "protocol": "HTTP", "types": [ "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-disconnected" ], "config": { "subscriptionDetail": { "device": { "phoneNumber": "+99999991000" } }, "subscriptionMaxEvents": 5, "initialEvent": true } } } }, "schema": { "description": "The request for creating a event-type event subscription", "type": "object", "required": [ "sink", "protocol", "config", "types" ], "properties": { "protocol": { "type": "string", "enum": [ "HTTP", "MQTT3", "MQTT5", "AMQP", "NATS", "KAFKA" ], "description": "Identifier of a delivery protocol. Only HTTP is allowed for now" }, "sink": { "type": "string", "format": "uri", "description": "The address to which events shall be delivered using the selected protocol." }, "sinkCredential": { "description": "A sink credential provides authentication or authorization information necessary to enable delivery of events to a target.", "type": "object", "properties": { "credentialType": { "type": "string", "enum": [ "PLAIN", "ACCESSTOKEN", "REFRESHTOKEN" ], "description": "The type of the credential.\nNote: Type of the credential - MUST be set to ACCESSTOKEN for now\n" } }, "required": [ "credentialType" ] }, "types": { "description": "Camara Event types eligible to be delivered by this subscription.\nNote: For the current Commonalities API design guidelines, only one event type per subscription is allowed, yet in the following releases use of array of event types SHALL be specified without changing this definition.\n", "type": "array", "minItems": 1, "maxItems": 1, "items": { "type": "string", "description": "reachability-data - Event triggered when the device is connected to the network for Data usage (regardless of the SMS reachability).\n\nreachability-sms - Event triggered when the device is connected to the network only for SMS usage\n\nreachability-disconnected - Event triggered when the device is not connected.\n", "enum": [ "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-data", "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-sms", "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-disconnected" ] } }, "config": { "description": "Implementation-specific configuration parameters needed by the subscription manager for acquiring events.\nIn CAMARA we have predefined attributes like `subscriptionExpireTime`, `subscriptionMaxEvents`, `initialEvent`\nSpecific event type attributes must be defined in `subscriptionDetail`\nNote: if a request is performed for several event type, all subscribed event will use same `config` parameters.\n", "type": "object", "required": [ "subscriptionDetail" ], "properties": { "subscriptionDetail": { "description": "The detail of the requested event subscription.", "type": "object", "properties": { "device": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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.\n", "type": "object", "properties": { "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}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 } } }, "subscriptionExpireTime": { "type": "string", "format": "date-time", "description": "The subscription expiration time (in date-time format) requested by the API consumer. Up to API project decision to keep it." }, "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. Up to API project decision to keep it.", "minimum": 1 }, "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.Up to API project decision to keep it.\nExample: Consumer subscribes to reachability SMS. If consumer sets initialEvent to true and device is already reachable by SMS, an event is triggered.\n" } } } } } } }, "description": "" } } }, "/passthrough/camara/v1/number-verification/number-verification/v0/verify": { "post": { "tags": [ "Number Verification v1.0.0" ], "summary": "Verifies if the received hashed/plain text phone number matches the phone number associated with the access token", "parameters": [ { "name": "code", "in": "query", "required": false, "description": "Authorization code received from the CSP", "schema": { "type": "string" } }, { "name": "state", "in": "query", "required": false, "description": "Application state", "schema": { "type": "string" } }, { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": { "type": "string" } }, { "name": "authorization", "in": "header", "required": false, "description": "authorization header for token", "schema": { "type": "string" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "phoneNumberVerify", "description": "Verifies if the specified phone number (either in plain text or hashed format) matches the one that the user is currently using. Only one of the plain or hashed formats must be provided.\n- The number verification will be done for the user that has authenticated via mobile network\n- It returns true/false depending on if the hashed phone number received as input matches the authenticated user's `device phone number` associated to the access token\n", "responses": { "200": { "content": { "application/json": { "examples": { "Example_1": { "value": { "devicePhoneNumberVerified": true } } }, "schema": { "type": "object", "description": "Number verification result", "required": [ "devicePhoneNumberVerified" ], "properties": { "devicePhoneNumberVerified": { "description": "Number verification. True, if it matches", "type": "boolean" } } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param" } } }, "schema": { "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" } } } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "GENERIC_401_AUTHENTICATION_REQUIRED": { "description": "New authentication is needed, authentication is no longer valid", "value": { "status": 401, "code": "AUTHENTICATION_REQUIRED", "message": "New authentication is required." } }, "GENERIC_401_UNAUTHENTICATED": { "description": "Request cannot be authenticated", "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials." } } }, "schema": { "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" } } } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "GENERIC_403_PERMISSION_DENIED": { "description": "Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security", "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action." } }, "GENERIC_403_INVALID_TOKEN_CONTEXT": { "value": { "status": 403, "code": "INVALID_TOKEN_CONTEXT", "message": "Phone number cannot be deducted from access token context" } }, "GENERIC_403_USER_NOT_AUTHENTICATED_BY_MOBILE_NETWORK": { "value": { "status": 403, "code": "NUMBER_VERIFICATION.USER_NOT_AUTHENTICATED_BY_MOBILE_NETWORK", "message": "Client must authenticate via the mobile network to use this service" } } }, "schema": { "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" } } } } }, "description": "" }, "500": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 500, "code": "INTERNAL", "message": "Server error" } } }, "schema": { "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" } } } } }, "description": "" }, "503": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 503, "code": "UNAVAILABLE", "message": "Service unavailable" } } }, "schema": { "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" } } } } }, "description": "" }, "504": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 504, "code": "TIMEOUT", "message": "Request timeout exceeded. Try later." } } }, "schema": { "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" } } } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "NUMBER_VERIFY_TRUE_PHONE_NUMBER": { "value": { "phoneNumber": "+99999991000" } }, "NUMBER_VERIFY_FALSE_PHONE_NUMBER": { "value": { "phoneNumber": "+99999991001" } } }, "schema": { "type": "object", "description": "Payload to verify the phone number.", "minProperties": 1, "maxProperties": 1, "properties": { "phoneNumber": { "type": "string", "pattern": "^\\+[1-9][0-9]{4,14}$", "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 '+'." }, "hashedPhoneNumber": { "description": "Hashed phone number. SHA-256 (in hexadecimal representation) of the mobile phone number in **E.164 format (starting with country code)**. Prefixed with '+'.", "type": "string" } } } } }, "description": "" } } }, "/passthrough/camara/v1/kyc-tenure/kyc-tenure/v0.1/check-tenure": { "post": { "tags": [ "KYC Tenure v0.1" ], "summary": "The KYC Tenure service API", "parameters": [ { "name": "authorization", "in": "header", "required": false, "description": "authorization header for token", "schema": { "type": "string" } }, { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": { "type": "string", "pattern": "^[a-zA-Z0-9-]{1,55}$", "default": "b4333c46-49c0-4f62-80d7-f0ef930f1c46" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "checkTenure", "description": "Verifies a specified length of tenure, based on a provided date, for a network subscriber to establish a level of trust for the network subscription identifier.\n", "responses": { "200": { "content": { "application/json": { "examples": { "Example_1": { "value": { "tenureDateCheck": true, "contractType": "PAYG" } } }, "schema": { "properties": { "tenureDateCheck": { "description": "`true` when the identified mobile subscription has had valid tenure since `tenureDate`, otherwise `false`\n", "type": "boolean" }, "contractType": { "description": "If exists, populated with:\n- `PAYG` - prepaid (pay-as-you-go) account\n- `PAYM` - contract account\n- `Business` - Business (enterprise) account\nThis attribute may be omitted from the response set if the information is not available\n", "type": "string", "enum": [ "PAYG", "PAYM", "Business" ] } }, "required": [ "tenureDateCheck" ] } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "GENERIC_400_OUT_OF_RANGE": { "description": "Out of Range. Specific Syntax Exception used when a given field has a pre-defined range or a invalid filter criteria combination is requested", "value": { "status": 400, "code": "OUT_OF_RANGE", "message": "Client specified an invalid range." } }, "GENERIC_400_INVALID_ARGUMENT": { "description": "Invalid Argument. Generic Syntax Exception", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "message", "status", "code" ], "properties": { "message": { "type": "string", "description": "A human readable description of what the event represent" }, "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "Friendly Code to describe the error" } } }, { "type": "object", "properties": { "status": { "enum": [ 400 ] }, "code": { "enum": [ "INVALID_ARGUMENT", "OUT_OF_RANGE" ] } } } ] } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "GENERIC_401_UNAUTHENTICATED": { "description": "Request cannot be authenticated", "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials." } }, "GENERIC_401_AUTHENTICATION_REQUIRED": { "description": "New authentication is needed, authentication is no longer valid", "value": { "status": 401, "code": "AUTHENTICATION_REQUIRED", "message": "New authentication is required." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "message", "status", "code" ], "properties": { "message": { "type": "string", "description": "A human readable description of what the event represent" }, "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "Friendly Code to describe the error" } } }, { "type": "object", "properties": { "status": { "enum": [ 401 ] }, "code": { "enum": [ "UNAUTHENTICATED", "AUTHENTICATION_REQUIRED" ] } } } ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "GENERIC_403_PERMISSION_DENIED": { "description": "Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security", "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "message", "status", "code" ], "properties": { "message": { "type": "string", "description": "A human readable description of what the event represent" }, "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "Friendly Code to describe the error" } } }, { "type": "object", "properties": { "status": { "enum": [ 403 ] }, "code": { "enum": [ "PERMISSION_DENIED" ] } } } ] } } }, "description": "" }, "404": { "content": { "application/json": { "examples": { "GENERIC_404_IDENTIFIER_NOT_FOUND": { "description": "The phone number is not associated with a CSP customer account", "value": { "status": 404, "code": "IDENTIFIER_NOT_FOUND", "message": "The phone number provided is not associated with a customer account" } } }, "schema": { "allOf": [ { "type": "object", "required": [ "message", "status", "code" ], "properties": { "message": { "type": "string", "description": "A human readable description of what the event represent" }, "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "Friendly Code to describe the error" } } }, { "type": "object", "properties": { "status": { "enum": [ 404 ] }, "code": { "enum": [ "IDENTIFIER_NOT_FOUND" ] } } } ] } } }, "description": "" }, "422": { "content": { "application/json": { "examples": { "GENERIC_422_UNNECESSARY_IDENTIFIER": { "description": "An explicit phone number has been provided when one is already associated with the access token", "value": { "status": 422, "code": "UNNECESSARY_IDENTIFIER", "message": "An explicit phone number has been provided when one is already associated with the access token" } }, "GENERIC_422_SERVICE_NOT_APPLICABLE": { "description": "Service is not applicable for the provided phone number", "value": { "status": 422, "code": "SERVICE_NOT_APPLICABLE", "message": "The service is not applicable for the provided phone number" } }, "GENERIC_422_MISSING_IDENTIFIER": { "description": "No phone number has been provided either explicitly or associated with the access token", "value": { "status": 422, "code": "MISSING_IDENTIFIER", "message": "No phone number has been provided" } } }, "schema": { "allOf": [ { "type": "object", "required": [ "message", "status", "code" ], "properties": { "message": { "type": "string", "description": "A human readable description of what the event represent" }, "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "Friendly Code to describe the error" } } }, { "type": "object", "properties": { "status": { "enum": [ 422 ] }, "code": { "enum": [ "SERVICE_NOT_APPLICABLE", "MISSING_IDENTIFIER", "UNNECESSARY_IDENTIFIER" ] } } } ] } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "CHECK_TENURE_REQUEST_TRUE": { "value": { "phoneNumber": "+99999991000", "tenureDate": "2023-07-03" } }, "CHECK_TENURE_REQUEST_FALSE": { "value": { "phoneNumber": "+99999991001", "tenureDate": "2023-07-03" } }, "CHECK_TENURE_REQUEST_3_LEGGED": { "value": { "tenureDate": "2023-07-03" } } }, "schema": { "description": "Specifies date from which continuous tenure of the identified mobile subscriber is required to be confirmed", "type": "object", "properties": { "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}$" }, "tenureDate": { "type": "string", "description": "The date, in RFC 3339 / ISO 8601 compliant format \"YYYY-MM-DD\", from which continuous tenure of the identified network subscriber is required to be confirmed", "format": "date" } }, "required": [ "tenureDate" ] } } }, "description": "" } } }, "/.well-known/openid-configuration": { "get": { "tags": [ "Well Known Metadata" ], "summary": "Get Well Known Oidc", "operationId": "get_well_known_oidc_openid_configuration_get", "description": " ", "responses": { "200": { "content": { "application/json": { "examples": { "Example_1": { "value": { "authorization_endpoint": "", "token_endpoint": "", "fast_flow_csp_auth_endpoint": "" } } }, "schema": { "properties": { "authorization_endpoint": { "type": "string", "maxLength": 255, "title": "Authorization Endpoint" }, "token_endpoint": { "type": "string", "maxLength": 255, "title": "Token Endpoint" }, "fast_flow_csp_auth_endpoint": { "type": "string", "maxLength": 255, "title": "Fast Flow Csp Auth Endpoint" } }, "type": "object", "required": [ "authorization_endpoint", "token_endpoint", "fast_flow_csp_auth_endpoint" ], "title": "Metadata" } } }, "description": "" } }, "parameters": [ { "$ref": "#/components/parameters/x-rapidapi-host" } ] } }, "/passthrough/camara/v1/sim-swap/sim-swap/v0/check": { "post": { "tags": [ "SIM Swap v1.0.0" ], "parameters": [ { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": { "type": "string" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "checkSimSwap", "description": "Check if SIM swap has been performed during a past period", "responses": { "200": { "content": { "application/json": { "examples": { "Example_1": { "value": { "swapped": true } } }, "schema": { "type": "object", "required": [ "swapped" ], "properties": { "swapped": { "type": "boolean", "description": "Indicates whether the SIM card has been swapped during the period within the provided age." } } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "GENERIC_400_INVALID_ARGUMENT": { "description": "Invalid Argument. Generic Syntax Exception", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param." } } }, "schema": { "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" } } } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "GENERIC_401_UNAUTHENTICATED": { "description": "Request cannot be authenticated", "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials." } } }, "schema": { "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" } } } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "GENERIC_403_PERMISSION_DENIED": { "description": "Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security", "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action." } }, "GENERIC_403_INVALID_TOKEN_CONTEXT": { "description": "Reflect some inconsistency between information in some field of the API and the related OAuth2 Token", "value": { "status": 403, "code": "INVALID_TOKEN_CONTEXT", "message": "phoneNumber is not consistent with access token" } } }, "schema": { "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" } } } } }, "description": "" }, "404": { "content": { "application/json": { "examples": { "GENERIC_404_NOT_FOUND": { "description": "Resource is not found", "value": { "status": 404, "code": "NOT_FOUND", "message": "The specified resource is not found." } } }, "schema": { "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" } } } } }, "description": "" }, "422": { "content": { "application/json": { "examples": { "GENERIC_422_NOT_SUPPORTED": { "description": "Not Supported", "value": { "status": 422, "code": "NOT_SUPPORTED", "message": "Service not supported for this phoneNumber" } }, "UNIDENTIFIABLE_PHONE_NUMBER": { "description": "The phone number is not included in the request and the phone number information cannot be derived from the 3-legged access token", "value": { "status": 422, "code": "UNIDENTIFIABLE_PHONE_NUMBER", "message": "The phone number cannot be identified" } } }, "schema": { "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" } } } } }, "description": "" }, "500": { "content": { "application/json": { "examples": { "GENERIC_500_INTERNAL": { "description": "Problem in Server side. Regular Server Exception", "value": { "status": 500, "code": "INTERNAL", "message": "Unknown server error. Typically a server bug." } } }, "schema": { "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" } } } } }, "description": "" }, "503": { "content": { "application/json": { "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." } } }, "schema": { "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" } } } } }, "description": "" }, "504": { "content": { "application/json": { "examples": { "GENERIC_504_TIMEOUT": { "description": "API Server Timeout", "value": { "status": 504, "code": "TIMEOUT", "message": "Request timeout exceeded." } } }, "schema": { "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" } } } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "SIM_SWAP_CHECK_TRUE_PHONE_NUMBER": { "value": { "phoneNumber": "+99999991000", "maxAge": 240 } }, "SIM_SWAP_CHECK_FALSE_PHONE_NUMBER": { "value": { "phoneNumber": "+99999991001", "maxAge": 240 } } }, "schema": { "type": "object", "properties": { "phoneNumber": { "type": "string", "pattern": "^\\+[1-9][0-9]{4,14}$", "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 '+'." }, "maxAge": { "type": "integer", "description": "Period in hours to be checked for SIM swap.\n", "format": "int32", "minimum": 1, "maximum": 2400, "default": 240 } } } } }, "description": "" } } }, "/device-attach/v0/attachments": { "post": { "tags": [ "Slice Device Attach v1.0.0" ], "summary": "Attach device to an existing or preconfigured slice.", "operationId": "attachDevice", "description": "Attach device to a specific network slice.", "responses": { "202": { "content": { "application/json": { "examples": { "Example_1": { "value": { "nac_resource_id": "", "resource": { "device": { "phoneNumber": "", "networkAccessIdentifier": "", "ipv4Address": { "publicAddress": "", "privateAddress": "", "publicPort": 0 }, "ipv6Address": "", "imsi": 0 }, "customer": { "name": "", "description": "", "address": "", "contact": "" }, "sliceId": "", "mobile_services": [], "traffic_categories": { "apps": { "os": "09078034-07db-4b13-a970-ab80235f7369", "apps": [] } }, "webhook": { "notificationUrl": "https://application-server.com", "notificationAuthToken": "c8974e592c2fa383d4a3960714" } }, "deviceStatus": "ATTACHED", "deviceAttachState": "Completed", "applicationAttachSuccessful": true } } }, "schema": { "properties": { "nac_resource_id": { "type": "string", "maxLength": 100, "title": "Nac Resource Id", "description": "Resource identifier of the attachment data." }, "resource": { "properties": { "device": { "properties": { "phoneNumber": { "type": "string", "maxLength": 16, "pattern": "^\\+[1-9][0-9]{4,14}$", "title": "Phonenumber", "description": "Phone number of the subscription, if any. Optional.", "nullable": true }, "networkAccessIdentifier": { "type": "string", "maxLength": 256, "pattern": "^\\S+@\\S+\\.\\S+$", "title": "Networkaccessidentifier", "description": "Email address-like external identifier of the subscription registered at the operator. If both networkAccessIdentifier and phoneNumber are included, phoneNumber may be dropped and networkAccessIdentifier may be retained.", "nullable": true }, "ipv4Address": { "allOf": [ { "properties": { "publicAddress": { "type": "string", "maxLength": 15, "title": "Publicaddress", "description": "Public IPv4 address of the device. Either of the device or the NAT the device is behind.", "nullable": true }, "privateAddress": { "type": "string", "maxLength": 15, "title": "Privateaddress", "description": "Private IPv4 address of the device, if it is behind a NAT.", "nullable": true }, "publicPort": { "type": "integer", "maximum": 65535, "minimum": 0, "format": "int32", "title": "Publicport", "description": "Public port used by the device. Port is necessary, as private address ranges overlap, and public port is used to extend the range for CGNAT.", "nullable": true } }, "type": "object", "title": "DeviceIpv4Addr" } ], "description": "IPv4 address of the device. IP address is needed for some flow-oriented services, such as QoD." }, "ipv6Address": { "type": "string", "maxLength": 45, "title": "Ipv6Address", "description": "IPv6 address of the device. IP address is needed for some flow-oriented services, such as QoD.", "nullable": true }, "imsi": { "type": "integer", "title": "Imsi", "description": "International mobile subscriber identity", "nullable": true } }, "type": "object", "title": "MobileSubscribersDevice" }, "customer": { "allOf": [ { "properties": { "name": { "type": "string", "maxLength": 250, "title": "Name" }, "description": { "type": "string", "maxLength": 100, "title": "Description", "description": "Description of the slice, e.g. \"B2B_5G_eMBB_Slice\"", "nullable": true }, "address": { "type": "string", "maxLength": 250, "title": "Address", "description": "Address of the customer ordering slice creation.", "nullable": true }, "contact": { "type": "string", "maxLength": 250, "title": "Contact", "description": "Contact of the customer ordering slice creation.", "nullable": true } }, "type": "object", "required": [ "name" ], "title": "Customer" } ], "description": "Customer who orders the device attach operations." }, "sliceId": { "type": "string", "maxLength": 64, "minLength": 5, "pattern": "^[a-zA-Z0-9][a-zA-Z0-9-]{3,63}[a-zA-Z0-9]$", "title": "Sliceid", "description": "Slice resource identifier, simple name or UUID." }, "mobile_services": { "items": { "type": "string" }, "type": "array", "maxItems": 10, "title": "Mobile Services", "description": "List of services allowed for the device.", "default": [ "Voice", "Voicemail", "5G-Data" ] }, "traffic_categories": { "allOf": [ { "properties": { "apps": { "properties": { "os": { "type": "string", "maxLength": 100, "title": "Os", "description": "Operating system identifier, UUID" }, "apps": { "items": { "type": "string", "maxLength": 50 }, "type": "array", "title": "Apps", "description": "List of application identifiers" } }, "type": "object", "required": [ "os", "apps" ], "title": "Apps" } }, "type": "object", "required": [ "apps" ], "title": "TrafficCategories" } ], "description": "Denotes the operating system id and the applications' identifiers" }, "webhook": { "allOf": [ { "properties": { "notificationUrl": { "type": "string", "maxLength": 256, "title": "Notificationurl", "description": "Notification URL for session-related events." }, "notificationAuthToken": { "type": "string", "maxLength": 4096, "title": "Notificationauthtoken", "description": "Authorization token for notification sending.", "nullable": true } }, "type": "object", "required": [ "notificationUrl" ], "title": "Webhook" } ], "description": "Callback settings for the requester application." } }, "type": "object", "required": [ "device", "sliceId" ], "title": "AttachResource" }, "deviceStatus": { "allOf": [ { "type": "string", "enum": [ "ATTACHED", "DETACHED" ], "title": "AttachStatus" } ], "description": "Status of the device in relation to the given slice e.g. ATTACHED or DETACHED." }, "deviceAttachState": { "allOf": [ { "type": "string", "enum": [ "Completed", "Accepted", "Rejected", "Acknowledged" ], "title": "OrderState" } ], "description": "Progress/state of the device attach order, e.g. Completed, Accepted, Rejected." }, "applicationAttachSuccessful": { "type": "boolean", "title": "Applicationattachsuccessful", "description": "Denotes whether successful application attach subscription was subsequently sent.", "nullable": true } }, "type": "object", "required": [ "nac_resource_id", "resource" ], "title": "AttachInfo" } } }, "description": "" }, "422": { "content": { "application/json": { "examples": { "Example_1": { "value": { "detail": [ { "loc": [], "msg": "", "type": "" } ] } } }, "schema": { "properties": { "detail": { "items": { "properties": { "loc": { "type": "array", "items": { "type": "string" }, "title": "Location" }, "msg": { "type": "string", "title": "Message" }, "type": { "type": "string", "title": "Error Type" } }, "type": "object", "required": [ "loc", "msg", "type" ], "title": "ValidationError" }, "type": "array", "title": "Detail" } }, "type": "object", "title": "HTTPValidationError" } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "DEVICE_ATTACH_PHONE_NUMBER": { "value": { "device": { "phoneNumber": "+99999991000", "imsi": 99999991000 }, "customer": { "name": "DefaultAttachOperationCustomer", "description": "I Am Default Who Order The Device Attach Operation", "address": "Dummy Customer Address", "contact": "My Contact Should Be Here" }, "sliceId": "slice-773", "mobile_services": [ "Voice", "Voicemail", "5G-Data" ], "traffic_categories": { "apps": { "os": "09078034-07db-4b13-a970-ab80235f7369", "apps": [ "Daedalus" ] } }, "webhook": { "notificationUrl": "https://application-server.com", "notificationAuthToken": "c8974e592c2fa383d4a396071" } } } }, "schema": { "properties": { "device": { "properties": { "phoneNumber": { "type": "string", "maxLength": 16, "pattern": "^\\+[1-9][0-9]{4,14}$", "title": "Phonenumber", "description": "Phone number of the subscription, if any. Optional.", "nullable": true }, "networkAccessIdentifier": { "type": "string", "maxLength": 256, "pattern": "^\\S+@\\S+\\.\\S+$", "title": "Networkaccessidentifier", "description": "Email address-like external identifier of the subscription registered at the operator. If both networkAccessIdentifier and phoneNumber are included, phoneNumber may be dropped and networkAccessIdentifier may be retained.", "nullable": true }, "ipv4Address": { "allOf": [ { "properties": { "publicAddress": { "type": "string", "maxLength": 15, "title": "Publicaddress", "description": "Public IPv4 address of the device. Either of the device or the NAT the device is behind.", "nullable": true }, "privateAddress": { "type": "string", "maxLength": 15, "title": "Privateaddress", "description": "Private IPv4 address of the device, if it is behind a NAT.", "nullable": true }, "publicPort": { "type": "integer", "maximum": 65535, "minimum": 0, "format": "int32", "title": "Publicport", "description": "Public port used by the device. Port is necessary, as private address ranges overlap, and public port is used to extend the range for CGNAT.", "nullable": true } }, "type": "object", "title": "DeviceIpv4Addr" } ], "description": "IPv4 address of the device. IP address is needed for some flow-oriented services, such as QoD." }, "ipv6Address": { "type": "string", "maxLength": 45, "title": "Ipv6Address", "description": "IPv6 address of the device. IP address is needed for some flow-oriented services, such as QoD.", "nullable": true }, "imsi": { "type": "integer", "title": "Imsi", "description": "International mobile subscriber identity", "nullable": true } }, "type": "object", "title": "MobileSubscribersDevice" }, "customer": { "allOf": [ { "properties": { "name": { "type": "string", "maxLength": 250, "title": "Name" }, "description": { "type": "string", "maxLength": 100, "title": "Description", "description": "Description of the slice, e.g. \"B2B_5G_eMBB_Slice\"", "nullable": true }, "address": { "type": "string", "maxLength": 250, "title": "Address", "description": "Address of the customer ordering slice creation.", "nullable": true }, "contact": { "type": "string", "maxLength": 250, "title": "Contact", "description": "Contact of the customer ordering slice creation.", "nullable": true } }, "type": "object", "required": [ "name" ], "title": "Customer" } ], "description": "Customer who orders the device attach operations." }, "sliceId": { "type": "string", "maxLength": 64, "minLength": 5, "pattern": "^[a-zA-Z0-9][a-zA-Z0-9-]{3,63}[a-zA-Z0-9]$", "title": "Sliceid", "description": "Slice resource identifier, simple name or UUID." }, "mobile_services": { "items": { "type": "string" }, "type": "array", "maxItems": 10, "title": "Mobile Services", "description": "List of services allowed for the device.", "default": [ "Voice", "Voicemail", "5G-Data" ] }, "traffic_categories": { "allOf": [ { "properties": { "apps": { "properties": { "os": { "type": "string", "maxLength": 100, "title": "Os", "description": "Operating system identifier, UUID" }, "apps": { "items": { "type": "string", "maxLength": 50 }, "type": "array", "title": "Apps", "description": "List of application identifiers" } }, "type": "object", "required": [ "os", "apps" ], "title": "Apps" } }, "type": "object", "required": [ "apps" ], "title": "TrafficCategories" } ], "description": "Denotes the operating system id and the applications' identifiers" }, "webhook": { "allOf": [ { "properties": { "notificationUrl": { "type": "string", "maxLength": 256, "title": "Notificationurl", "description": "Notification URL for session-related events." }, "notificationAuthToken": { "type": "string", "maxLength": 4096, "title": "Notificationauthtoken", "description": "Authorization token for notification sending.", "nullable": true } }, "type": "object", "required": [ "notificationUrl" ], "title": "Webhook" } ], "description": "Callback settings for the requester application." } }, "type": "object", "required": [ "device", "sliceId" ], "title": "AttachResource" } } }, "description": "" }, "parameters": [ { "$ref": "#/components/parameters/x-rapidapi-host" } ] }, "get": { "tags": [ "Slice Device Attach v1.0.0" ], "summary": "Retrieve the given device attach resources associated with the owner.", "operationId": "getAllAttachmentsStatus", "description": "Retrieve the given device attach resources associated with the owner.", "responses": { "200": { "content": { "application/json": { "examples": { "Example_1": { "value": [ { "nac_resource_id": "", "resource": { "device": { "phoneNumber": "", "networkAccessIdentifier": "", "ipv4Address": { "publicAddress": "", "privateAddress": "", "publicPort": 0 }, "ipv6Address": "", "imsi": 0 }, "customer": { "name": "", "description": "", "address": "", "contact": "" }, "sliceId": "", "mobile_services": [], "traffic_categories": { "apps": { "os": "09078034-07db-4b13-a970-ab80235f7369", "apps": [] } }, "webhook": { "notificationUrl": "https://application-server.com", "notificationAuthToken": "c8974e592c2fa383d4a3960714" } }, "deviceStatus": "ATTACHED", "deviceAttachState": "Completed", "applicationAttachSuccessful": true } ] } }, "schema": { "items": { "properties": { "nac_resource_id": { "type": "string", "maxLength": 100, "title": "Nac Resource Id", "description": "Resource identifier of the attachment data." }, "resource": { "properties": { "device": { "properties": { "phoneNumber": { "type": "string", "maxLength": 16, "pattern": "^\\+[1-9][0-9]{4,14}$", "title": "Phonenumber", "description": "Phone number of the subscription, if any. Optional.", "nullable": true }, "networkAccessIdentifier": { "type": "string", "maxLength": 256, "pattern": "^\\S+@\\S+\\.\\S+$", "title": "Networkaccessidentifier", "description": "Email address-like external identifier of the subscription registered at the operator. If both networkAccessIdentifier and phoneNumber are included, phoneNumber may be dropped and networkAccessIdentifier may be retained.", "nullable": true }, "ipv4Address": { "allOf": [ { "properties": { "publicAddress": { "type": "string", "maxLength": 15, "title": "Publicaddress", "description": "Public IPv4 address of the device. Either of the device or the NAT the device is behind.", "nullable": true }, "privateAddress": { "type": "string", "maxLength": 15, "title": "Privateaddress", "description": "Private IPv4 address of the device, if it is behind a NAT.", "nullable": true }, "publicPort": { "type": "integer", "maximum": 65535, "minimum": 0, "format": "int32", "title": "Publicport", "description": "Public port used by the device. Port is necessary, as private address ranges overlap, and public port is used to extend the range for CGNAT.", "nullable": true } }, "type": "object", "title": "DeviceIpv4Addr" } ], "description": "IPv4 address of the device. IP address is needed for some flow-oriented services, such as QoD." }, "ipv6Address": { "type": "string", "maxLength": 45, "title": "Ipv6Address", "description": "IPv6 address of the device. IP address is needed for some flow-oriented services, such as QoD.", "nullable": true }, "imsi": { "type": "integer", "title": "Imsi", "description": "International mobile subscriber identity", "nullable": true } }, "type": "object", "title": "MobileSubscribersDevice" }, "customer": { "allOf": [ { "properties": { "name": { "type": "string", "maxLength": 250, "title": "Name" }, "description": { "type": "string", "maxLength": 100, "title": "Description", "description": "Description of the slice, e.g. \"B2B_5G_eMBB_Slice\"", "nullable": true }, "address": { "type": "string", "maxLength": 250, "title": "Address", "description": "Address of the customer ordering slice creation.", "nullable": true }, "contact": { "type": "string", "maxLength": 250, "title": "Contact", "description": "Contact of the customer ordering slice creation.", "nullable": true } }, "type": "object", "required": [ "name" ], "title": "Customer" } ], "description": "Customer who orders the device attach operations." }, "sliceId": { "type": "string", "maxLength": 64, "minLength": 5, "pattern": "^[a-zA-Z0-9][a-zA-Z0-9-]{3,63}[a-zA-Z0-9]$", "title": "Sliceid", "description": "Slice resource identifier, simple name or UUID." }, "mobile_services": { "items": { "type": "string" }, "type": "array", "maxItems": 10, "title": "Mobile Services", "description": "List of services allowed for the device.", "default": [ "Voice", "Voicemail", "5G-Data" ] }, "traffic_categories": { "allOf": [ { "properties": { "apps": { "properties": { "os": { "type": "string", "maxLength": 100, "title": "Os", "description": "Operating system identifier, UUID" }, "apps": { "items": { "type": "string", "maxLength": 50 }, "type": "array", "title": "Apps", "description": "List of application identifiers" } }, "type": "object", "required": [ "os", "apps" ], "title": "Apps" } }, "type": "object", "required": [ "apps" ], "title": "TrafficCategories" } ], "description": "Denotes the operating system id and the applications' identifiers" }, "webhook": { "allOf": [ { "properties": { "notificationUrl": { "type": "string", "maxLength": 256, "title": "Notificationurl", "description": "Notification URL for session-related events." }, "notificationAuthToken": { "type": "string", "maxLength": 4096, "title": "Notificationauthtoken", "description": "Authorization token for notification sending.", "nullable": true } }, "type": "object", "required": [ "notificationUrl" ], "title": "Webhook" } ], "description": "Callback settings for the requester application." } }, "type": "object", "required": [ "device", "sliceId" ], "title": "AttachResource" }, "deviceStatus": { "allOf": [ { "type": "string", "enum": [ "ATTACHED", "DETACHED" ], "title": "AttachStatus" } ], "description": "Status of the device in relation to the given slice e.g. ATTACHED or DETACHED." }, "deviceAttachState": { "allOf": [ { "type": "string", "enum": [ "Completed", "Accepted", "Rejected", "Acknowledged" ], "title": "OrderState" } ], "description": "Progress/state of the device attach order, e.g. Completed, Accepted, Rejected." }, "applicationAttachSuccessful": { "type": "boolean", "title": "Applicationattachsuccessful", "description": "Denotes whether successful application attach subscription was subsequently sent.", "nullable": true } }, "type": "object", "required": [ "nac_resource_id", "resource" ], "title": "AttachInfo" }, "type": "array", "title": "Response Getallattachmentsstatus" } } }, "description": "" } }, "parameters": [ { "$ref": "#/components/parameters/x-rapidapi-host" } ] } }, "/device-status/device-roaming-status-subscriptions/v0.7/subscriptions": { "get": { "tags": [ "Device Roaming Status Subscriptions v0.7" ], "summary": "Retrieve a list of device roaming status event subscription", "parameters": [ { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": { "type": "string", "pattern": "^[a-zA-Z0-9-]{0,55}$", "default": "b4333c46-49c0-4f62-80d7-f0ef930f1c46" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "retrieveDeviceRoamingStatusSubscriptionList", "description": "Retrieve a list of device roaming status event subscription(s)", "responses": { "200": { "content": { "application/json": { "examples": { "Example_1": { "value": [ { "protocol": "HTTP", "sink": "https://endpoint.example.com/sink", "types": [ "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-status" ], "config": { "subscriptionDetail": { "device": { "phoneNumber": "+99999991000", "networkAccessIdentifier": "123456789@domain.com", "ipv4Address": { "publicAddress": "84.125.93.10", "privateAddress": "84.125.93.10", "publicPort": 0 }, "ipv6Address": "2001:db8:85a3:8d3:1319:8a2e:370:7344" } }, "subscriptionExpireTime": "2023-01-17T13:18:23.682Z", "subscriptionMaxEvents": 5, "initialEvent": true }, "id": "qs15-h556-rt89-1298", "startsAt": "2023-07-03T12:27:08.312Z", "expiresAt": "2023-07-03T12:27:08.312Z", "status": "ACTIVATION_REQUESTED" } ] } }, "schema": { "type": "array", "minItems": 0, "items": { "description": "Represents a event-type subscription.", "type": "object", "required": [ "sink", "protocol", "config", "types", "id" ], "properties": { "protocol": { "type": "string", "enum": [ "HTTP", "MQTT3", "MQTT5", "AMQP", "NATS", "KAFKA" ], "description": "Identifier of a delivery protocol. Only HTTP is allowed for now" }, "sink": { "type": "string", "format": "url", "description": "The address to which events shall be delivered using the selected protocol." }, "types": { "description": "Camara Event types eligible to be delivered by this subscription.\nNote: for the Commonalities meta-release v0.4 we enforce to have only event type per subscription then for following meta-release use of array MUST be decided\n\n\n\n\n\n at API project level.\n", "type": "array", "minItems": 1, "maxItems": 1, "items": { "type": "string", "description": "roaming-status - Event triggered when the device switch from roaming ON to roaming OFF and conversely\n\nroaming-on - Event triggered when the device switch from roaming OFF to roaming ON\n\nroaming-off - Event triggered when the device switch from roaming ON to roaming OFF\n\nroaming-change-country - Event triggered when the device in roaming change country code\n", "enum": [ "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-status", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-on", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-off", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-change-country" ] } }, "config": { "description": "Implementation-specific configuration parameters needed by the subscription manager for acquiring events.\nIn CAMARA we have predefined attributes like `subscriptionExpireTime`, `subscriptionMaxEvents`, `initialEvent`\nSpecific event type attributes must be defined in `subscriptionDetail`\nNote: if a request is performed for several event type, all subscribed event will use same `config` parameters.\n", "type": "object", "required": [ "subscriptionDetail" ], "properties": { "subscriptionDetail": { "description": "The detail of the requested event subscription.", "type": "object", "properties": { "device": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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.\n", "type": "object", "properties": { "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}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 } } }, "subscriptionExpireTime": { "type": "string", "format": "date-time", "description": "The subscription expiration time (in date-time format) requested by the API consumer. Up to API project decision to keep it." }, "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. Up to API project decision to keep it.", "minimum": 1 }, "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.Up to API project decision to keep it.\nExample: Consumer request Roaming event. If consumer sets initialEvent to true and device is in roaming situation, an event is triggered\nUp to API project decision to keep it.\n" } } }, "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/r2.3/documentation/API-design-guidelines.md#122-event-notification)." }, "startsAt": { "type": "string", "format": "date-time", "description": "Date when the event subscription will begin/began\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\nRecommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)\n" }, "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.\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\nRecommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)\n" }, "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\n\n\n\n\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" ] } } } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "GENERIC_400_INVALID_ARGUMENT": { "description": "Invalid Argument. Generic Syntax Exception", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 400 ] }, "code": { "enum": [ "INVALID_ARGUMENT" ] } } } ] } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "GENERIC_401_UNAUTHENTICATED": { "description": "Request cannot be authenticated", "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials." } }, "GENERIC_401_AUTHENTICATION_REQUIRED": { "description": "New authentication is needed, authentication is no longer valid", "value": { "status": 401, "code": "AUTHENTICATION_REQUIRED", "message": "New authentication is required." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 401 ] }, "code": { "enum": [ "UNAUTHENTICATED", "AUTHENTICATION_REQUIRED" ] } } } ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "GENERIC_403_PERMISSION_DENIED": { "description": "Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security", "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 403 ] }, "code": { "enum": [ "PERMISSION_DENIED" ] } } } ] } } }, "description": "" } } }, "post": { "tags": [ "Device Roaming Status Subscriptions v0.7" ], "summary": "Create a device roaming status event subscription for a device", "parameters": [ { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": { "type": "string", "pattern": "^[a-zA-Z0-9-]{0,55}$", "default": "b4333c46-49c0-4f62-80d7-f0ef930f1c46" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "createDeviceRoamingStatusSubscription", "description": "Create a device roaming status event subscription for a device", "responses": { "201": { "content": { "application/json": { "examples": { "subscription-active": { "value": { "id": "550e8400-e29b-41d4-a716-446655440000", "sink": "https://endpoint.example.com/sink", "protocol": "HTTP", "types": [ "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-on" ], "config": { "subscriptionDetail": { "device": { "phoneNumber": "+99999991000" } }, "subscriptionExpireTime": "2024-07-17T13:18:23.682Z", "subscriptionMaxEvents": 5, "initialEvent": true }, "startsAt": "2024-07-03T21:12:02.871Z", "expiresAt": "2024-07-03T21:12:02.871Z", "status": "ACTIVE" } } }, "schema": { "description": "Represents a event-type subscription.", "type": "object", "required": [ "sink", "protocol", "config", "types", "id" ], "properties": { "protocol": { "type": "string", "enum": [ "HTTP", "MQTT3", "MQTT5", "AMQP", "NATS", "KAFKA" ], "description": "Identifier of a delivery protocol. Only HTTP is allowed for now" }, "sink": { "type": "string", "format": "url", "description": "The address to which events shall be delivered using the selected protocol." }, "types": { "description": "Camara Event types eligible to be delivered by this subscription.\nNote: for the Commonalities meta-release v0.4 we enforce to have only event type per subscription then for following meta-release use of array MUST be decided\n\n\n\n\n\n at API project level.\n", "type": "array", "minItems": 1, "maxItems": 1, "items": { "type": "string", "description": "roaming-status - Event triggered when the device switch from roaming ON to roaming OFF and conversely\n\nroaming-on - Event triggered when the device switch from roaming OFF to roaming ON\n\nroaming-off - Event triggered when the device switch from roaming ON to roaming OFF\n\nroaming-change-country - Event triggered when the device in roaming change country code\n", "enum": [ "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-status", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-on", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-off", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-change-country" ] } }, "config": { "description": "Implementation-specific configuration parameters needed by the subscription manager for acquiring events.\nIn CAMARA we have predefined attributes like `subscriptionExpireTime`, `subscriptionMaxEvents`, `initialEvent`\nSpecific event type attributes must be defined in `subscriptionDetail`\nNote: if a request is performed for several event type, all subscribed event will use same `config` parameters.\n", "type": "object", "required": [ "subscriptionDetail" ], "properties": { "subscriptionDetail": { "description": "The detail of the requested event subscription.", "type": "object", "properties": { "device": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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.\n", "type": "object", "properties": { "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}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 } } }, "subscriptionExpireTime": { "type": "string", "format": "date-time", "description": "The subscription expiration time (in date-time format) requested by the API consumer. Up to API project decision to keep it." }, "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. Up to API project decision to keep it.", "minimum": 1 }, "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.Up to API project decision to keep it.\nExample: Consumer request Roaming event. If consumer sets initialEvent to true and device is in roaming situation, an event is triggered\nUp to API project decision to keep it.\n" } } }, "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/r2.3/documentation/API-design-guidelines.md#122-event-notification)." }, "startsAt": { "type": "string", "format": "date-time", "description": "Date when the event subscription will begin/began\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\nRecommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)\n" }, "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.\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\nRecommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)\n" }, "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\n\n\n\n\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" ] } } } } }, "description": "" }, "202": { "content": { "application/json": { "examples": { "Example_1": { "value": { "id": "qs15-h556-rt89-1298" } } }, "schema": { "description": "Response for a device reachability status operation managed asynchronously (Creation or Deletion)", "type": "object", "properties": { "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/r2.3/documentation/API-design-guidelines.md#122-event-notification)." } } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "GENERIC_400_INVALID_PROTOCOL": { "description": "Invalid protocol for events subscription management", "value": { "status": 400, "code": "INVALID_PROTOCOL", "message": "Only HTTP is supported" } }, "GENERIC_400_INVALID_ARGUMENT": { "description": "Invalid Argument. Generic Syntax Exception", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param." } }, "GENERIC_400_INVALID_CREDENTIAL": { "description": "Invalid sink credential type", "value": { "status": 400, "code": "INVALID_CREDENTIAL", "message": "Only Access token is supported" } }, "GENERIC_400_OUT_OF_RANGE": { "description": "Out of Range. Specific Syntax Exception used when a given field has a pre-defined range or a invalid filter criteria combination is requested", "value": { "status": 400, "code": "OUT_OF_RANGE", "message": "Client specified an invalid range." } }, "GENERIC_400_INVALID_TOKEN": { "description": "Invalid token type for sink credential of type ACCESSTOKEN", "value": { "status": 400, "code": "INVALID_TOKEN", "message": "Only bearer token is supported" } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 400 ] }, "code": { "enum": [ "INVALID_ARGUMENT", "OUT_OF_RANGE", "INVALID_PROTOCOL", "INVALID_CREDENTIAL", "INVALID_TOKEN" ] } } } ] } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "GENERIC_401_UNAUTHENTICATED": { "description": "Request cannot be authenticated", "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials." } }, "GENERIC_401_AUTHENTICATION_REQUIRED": { "description": "New authentication is needed, authentication is no longer valid", "value": { "status": 401, "code": "AUTHENTICATION_REQUIRED", "message": "New authentication is required." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 401 ] }, "code": { "enum": [ "UNAUTHENTICATED", "AUTHENTICATION_REQUIRED" ] } } } ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "GENERIC_403_SUBSCRIPTION_MISMATCH": { "description": "Inconsistent access token for requested subscription", "value": { "status": 403, "code": "SUBSCRIPTION_MISMATCH", "message": "Inconsistent access token for requested events subscription" } }, "GENERIC_403_PERMISSION_DENIED": { "description": "Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security", "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 403 ] }, "code": { "enum": [ "PERMISSION_DENIED", "SUBSCRIPTION_MISMATCH" ] } } } ] } } }, "description": "" }, "409": { "content": { "application/json": { "examples": { "GENERIC_409_ABORTED": { "description": "Concurreny of processes of the same nature/scope", "value": { "status": 409, "code": "ABORTED", "message": "Concurrency conflict." } }, "GENERIC_409_ALREADY_EXISTS": { "description": "Trying to create an existing resource", "value": { "status": 409, "code": "ALREADY_EXISTS", "message": "The resource that a client tried to create already exists." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 409 ] }, "code": { "enum": [ "ABORTED", "ALREADY_EXISTS" ] } } } ] } } }, "description": "" }, "422": { "content": { "application/json": { "examples": { "GENERIC_422_MULTIEVENT_SUBSCRIPTION_NOT_SUPPORTED": { "description": "Multi event types subscription is not supported", "value": { "status": 422, "code": "MULTIEVENT_SUBSCRIPTION_NOT_SUPPORTED", "message": "Multi event types subscription not managed" } }, "GENERIC_422_UNNECESSARY_IDENTIFIER": { "description": "An explicit identifier is provided when a device or phone number has already been identified from the access token", "value": { "status": 422, "code": "UNNECESSARY_IDENTIFIER", "message": "The device is already identified by the access token." } }, "GENERIC_422_IDENTIFIER_MISMATCH": { "description": "Inconsistency between identifiers not pointing to the same device", "value": { "status": 422, "code": "IDENTIFIER_MISMATCH", "message": "Provided identifiers are not consistent." } }, "GENERIC_422_MISSING_IDENTIFIER": { "description": "An identifier is not included in the request and the device or phone number identification cannot be derived from the 3-legged access token", "value": { "status": 422, "code": "MISSING_IDENTIFIER", "message": "The device cannot be identified." } }, "GENERIC_422_SERVICE_NOT_APPLICABLE": { "description": "Service not applicable for the provided identifier", "value": { "status": 422, "code": "SERVICE_NOT_APPLICABLE", "message": "The service is not available for the provided identifier." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 422 ] }, "code": { "enum": [ "IDENTIFIER_MISMATCH", "SERVICE_NOT_APPLICABLE", "MISSING_IDENTIFIER", "UNSUPPORTED_IDENTIFIER", "UNNECESSARY_IDENTIFIER", "MULTIEVENT_SUBSCRIPTION_NOT_SUPPORTED" ] } } } ] } } }, "description": "" }, "429": { "content": { "application/json": { "examples": { "GENERIC_429_QUOTA_EXCEEDED": { "description": "Request is rejected due to exceeding a business quota limit", "value": { "status": 429, "code": "QUOTA_EXCEEDED", "message": "Out of resource quota." } }, "GENERIC_429_TOO_MANY_REQUESTS": { "description": "Access to the API has been temporarily blocked due to rate or spike arrest limits being reached", "value": { "status": 429, "code": "TOO_MANY_REQUESTS", "message": "Rate limit reached." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 429 ] }, "code": { "enum": [ "QUOTA_EXCEEDED", "TOO_MANY_REQUESTS" ] } } } ] } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "Create Roaming Status Subscription": { "value": { "sink": "https://endpoint.example.com/sink", "protocol": "HTTP", "types": [ "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-status" ], "config": { "subscriptionDetail": { "device": { "phoneNumber": "+99999991000" } }, "subscriptionMaxEvents": 5, "initialEvent": true } } }, "Create Roaming Change Country Subscription": { "value": { "sink": "https://endpoint.example.com/sink", "protocol": "HTTP", "types": [ "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-change-country" ], "config": { "subscriptionDetail": { "device": { "phoneNumber": "+99999991000" } }, "subscriptionMaxEvents": 5, "initialEvent": true } } }, "Create Roaming On Subscription": { "value": { "sink": "https://endpoint.example.com/sink", "protocol": "HTTP", "types": [ "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-on" ], "config": { "subscriptionDetail": { "device": { "phoneNumber": "+99999991000" } }, "subscriptionMaxEvents": 5, "initialEvent": true } } }, "Create Roaming Off Subscription": { "value": { "sink": "https://endpoint.example.com/sink", "protocol": "HTTP", "types": [ "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-off" ], "config": { "subscriptionDetail": { "device": { "phoneNumber": "+99999991000" } }, "subscriptionMaxEvents": 5, "initialEvent": true } } } }, "schema": { "description": "The request for creating a event-type event subscription", "type": "object", "required": [ "sink", "protocol", "config", "types" ], "properties": { "protocol": { "type": "string", "enum": [ "HTTP", "MQTT3", "MQTT5", "AMQP", "NATS", "KAFKA" ], "description": "Identifier of a delivery protocol. Only HTTP is allowed for now" }, "sink": { "type": "string", "format": "uri", "description": "The address to which events shall be delivered using the selected protocol." }, "sinkCredential": { "description": "A sink credential provides authentication or authorization information necessary to enable delivery of events to a target.", "type": "object", "properties": { "credentialType": { "type": "string", "enum": [ "PLAIN", "ACCESSTOKEN", "REFRESHTOKEN" ], "description": "The type of the credential.\nNote: Type of the credential - MUST be set to ACCESSTOKEN for now\n" } }, "required": [ "credentialType" ] }, "types": { "description": "Camara Event types eligible to be delivered by this subscription.\nNote: for the current Commonalities version (v0.5) only one event type per subscription is allowed, yet in the following releases use of array of event types SHALL be specified without changing this definition.\n", "type": "array", "minItems": 1, "maxItems": 1, "items": { "type": "string", "description": "roaming-status - Event triggered when the device switch from roaming ON to roaming OFF and conversely\n\nroaming-on - Event triggered when the device switch from roaming OFF to roaming ON\n\nroaming-off - Event triggered when the device switch from roaming ON to roaming OFF\n\nroaming-change-country - Event triggered when the device in roaming change country code\n", "enum": [ "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-status", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-on", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-off", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-change-country" ] } }, "config": { "description": "Implementation-specific configuration parameters needed by the subscription manager for acquiring events.\nIn CAMARA we have predefined attributes like `subscriptionExpireTime`, `subscriptionMaxEvents`, `initialEvent`\nSpecific event type attributes must be defined in `subscriptionDetail`\nNote: if a request is performed for several event type, all subscribed event will use same `config` parameters.\n", "type": "object", "required": [ "subscriptionDetail" ], "properties": { "subscriptionDetail": { "description": "The detail of the requested event subscription.", "type": "object", "properties": { "device": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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.\n", "type": "object", "properties": { "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}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 } } }, "subscriptionExpireTime": { "type": "string", "format": "date-time", "description": "The subscription expiration time (in date-time format) requested by the API consumer. Up to API project decision to keep it." }, "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. Up to API project decision to keep it.", "minimum": 1 }, "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.Up to API project decision to keep it.\nExample: Consumer request Roaming event. If consumer sets initialEvent to true and device is in roaming situation, an event is triggered\nUp to API project decision to keep it.\n" } } } } } } }, "description": "" } } }, "/device-status/device-roaming-status-subscriptions/v0.7/subscriptions/{subscriptionId}": { "delete": { "tags": [ "Device Roaming Status Subscriptions v0.7" ], "summary": "Delete a device-roaming-status event subscription for a device", "parameters": [ { "name": "subscriptionId", "in": "path", "required": true, "description": "Subscription identifier that was obtained from the create event subscription operation", "schema": { "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/r2.3/documentation/API-design-guidelines.md#122-event-notification).", "default": "qs15-h556-rt89-1298" } }, { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": { "type": "string", "pattern": "^[a-zA-Z0-9-]{0,55}$", "default": "b4333c46-49c0-4f62-80d7-f0ef930f1c46" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "deleteDeviceRoamingStatusSubscription", "description": "Delete a given device-roaming-status subscription by ID", "responses": { "202": { "content": { "application/json": { "examples": { "Example_1": { "value": { "id": "qs15-h556-rt89-1298" } } }, "schema": { "description": "Response for a device reachability status operation managed asynchronously (Creation or Deletion)", "type": "object", "properties": { "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/r2.3/documentation/API-design-guidelines.md#122-event-notification)." } } } } }, "description": "" }, "204": { "content": { "application/json": { "examples": { "Example_1": { "value": {} } }, "schema": {} } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "GENERIC_400_SUBSCRIPTION_ID_REQUIRED": { "description": "subscription id is required", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Expected property is missing: subscriptionId" } }, "GENERIC_400_INVALID_ARGUMENT": { "description": "Invalid Argument. Generic Syntax Exception", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 400 ] }, "code": { "enum": [ "INVALID_ARGUMENT" ] } } } ] } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "GENERIC_401_UNAUTHENTICATED": { "description": "Request cannot be authenticated", "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials." } }, "GENERIC_401_AUTHENTICATION_REQUIRED": { "description": "New authentication is needed, authentication is no longer valid", "value": { "status": 401, "code": "AUTHENTICATION_REQUIRED", "message": "New authentication is required." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 401 ] }, "code": { "enum": [ "UNAUTHENTICATED", "AUTHENTICATION_REQUIRED" ] } } } ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "GENERIC_403_PERMISSION_DENIED": { "description": "Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security", "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 403 ] }, "code": { "enum": [ "PERMISSION_DENIED" ] } } } ] } } }, "description": "" }, "404": { "content": { "application/json": { "examples": { "GENERIC_404_NOT_FOUND": { "description": "Resource is not found", "value": { "status": 404, "code": "NOT_FOUND", "message": "The specified resource is not found." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 404 ] }, "code": { "enum": [ "NOT_FOUND" ] } } } ] } } }, "description": "" } } }, "get": { "tags": [ "Device Roaming Status Subscriptions v0.7" ], "summary": "Retrieve a roaming status event subscription for a device", "parameters": [ { "name": "subscriptionId", "in": "path", "required": true, "description": "Subscription identifier that was obtained from the create event subscription operation", "schema": { "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/r2.3/documentation/API-design-guidelines.md#122-event-notification).", "default": "qs15-h556-rt89-1298" } }, { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": { "type": "string", "pattern": "^[a-zA-Z0-9-]{0,55}$", "default": "b4333c46-49c0-4f62-80d7-f0ef930f1c46" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "retrieveDeviceRoamingStatusSubscription", "description": "retrieve device roaming status subscription information for a given subscription.", "responses": { "200": { "content": { "application/json": { "examples": { "subscription-active": { "value": { "id": "550e8400-e29b-41d4-a716-446655440000", "sink": "https://endpoint.example.com/sink", "protocol": "HTTP", "types": [ "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-on" ], "config": { "subscriptionDetail": { "device": { "phoneNumber": "+99999991000" } }, "subscriptionExpireTime": "2024-07-17T13:18:23.682Z", "subscriptionMaxEvents": 5, "initialEvent": true }, "startsAt": "2024-07-03T21:12:02.871Z", "expiresAt": "2024-07-03T21:12:02.871Z", "status": "ACTIVE" } }, "subscription-activation-requested": { "value": { "id": "550e8400-e29b-41d4-a716-446655440000", "sink": "https://endpoint.example.com/sink", "protocol": "HTTP", "types": [ "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-on" ], "config": { "subscriptionDetail": { "device": { "phoneNumber": "+99999991000" } }, "subscriptionExpireTime": "2024-07-17T13:18:23.682Z", "subscriptionMaxEvents": 5, "initialEvent": true }, "startsAt": "2024-07-03T21:12:02.871Z", "expiresAt": "2024-07-03T21:12:02.871Z", "status": "ACTIVATION_REQUESTED" } }, "subscription-deleted": { "value": { "id": "550e8400-e29b-41d4-a716-446655440000", "sink": "https://endpoint.example.com/sink", "protocol": "HTTP", "types": [ "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-on" ], "config": { "subscriptionDetail": { "device": { "phoneNumber": "+99999991000" } }, "subscriptionExpireTime": "2024-07-17T13:18:23.682Z", "subscriptionMaxEvents": 5, "initialEvent": true }, "startsAt": "2024-07-03T21:12:02.871Z", "expiresAt": "2024-07-03T21:12:02.871Z", "status": "DELETED" } } }, "schema": { "description": "Represents a event-type subscription.", "type": "object", "required": [ "sink", "protocol", "config", "types", "id" ], "properties": { "protocol": { "type": "string", "enum": [ "HTTP", "MQTT3", "MQTT5", "AMQP", "NATS", "KAFKA" ], "description": "Identifier of a delivery protocol. Only HTTP is allowed for now" }, "sink": { "type": "string", "format": "url", "description": "The address to which events shall be delivered using the selected protocol." }, "types": { "description": "Camara Event types eligible to be delivered by this subscription.\nNote: for the Commonalities meta-release v0.4 we enforce to have only event type per subscription then for following meta-release use of array MUST be decided\n\n\n\n\n\n at API project level.\n", "type": "array", "minItems": 1, "maxItems": 1, "items": { "type": "string", "description": "roaming-status - Event triggered when the device switch from roaming ON to roaming OFF and conversely\n\nroaming-on - Event triggered when the device switch from roaming OFF to roaming ON\n\nroaming-off - Event triggered when the device switch from roaming ON to roaming OFF\n\nroaming-change-country - Event triggered when the device in roaming change country code\n", "enum": [ "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-status", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-on", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-off", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-change-country" ] } }, "config": { "description": "Implementation-specific configuration parameters needed by the subscription manager for acquiring events.\nIn CAMARA we have predefined attributes like `subscriptionExpireTime`, `subscriptionMaxEvents`, `initialEvent`\nSpecific event type attributes must be defined in `subscriptionDetail`\nNote: if a request is performed for several event type, all subscribed event will use same `config` parameters.\n", "type": "object", "required": [ "subscriptionDetail" ], "properties": { "subscriptionDetail": { "description": "The detail of the requested event subscription.", "type": "object", "properties": { "device": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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.\n", "type": "object", "properties": { "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}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 } } }, "subscriptionExpireTime": { "type": "string", "format": "date-time", "description": "The subscription expiration time (in date-time format) requested by the API consumer. Up to API project decision to keep it." }, "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. Up to API project decision to keep it.", "minimum": 1 }, "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.Up to API project decision to keep it.\nExample: Consumer request Roaming event. If consumer sets initialEvent to true and device is in roaming situation, an event is triggered\nUp to API project decision to keep it.\n" } } }, "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/r2.3/documentation/API-design-guidelines.md#122-event-notification)." }, "startsAt": { "type": "string", "format": "date-time", "description": "Date when the event subscription will begin/began\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\nRecommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)\n" }, "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.\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\nRecommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)\n" }, "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\n\n\n\n\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" ] } } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "GENERIC_400_SUBSCRIPTION_ID_REQUIRED": { "description": "subscription id is required", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Expected property is missing: subscriptionId" } }, "GENERIC_400_INVALID_ARGUMENT": { "description": "Invalid Argument. Generic Syntax Exception", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 400 ] }, "code": { "enum": [ "INVALID_ARGUMENT" ] } } } ] } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "GENERIC_401_AUTHENTICATION_REQUIRED": { "description": "New authentication is needed, authentication is no longer valid", "value": { "status": 401, "code": "AUTHENTICATION_REQUIRED", "message": "New authentication is required." } }, "GENERIC_401_UNAUTHENTICATED": { "description": "Request cannot be authenticated", "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 401 ] }, "code": { "enum": [ "UNAUTHENTICATED", "AUTHENTICATION_REQUIRED" ] } } } ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "GENERIC_403_PERMISSION_DENIED": { "description": "Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security", "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 403 ] }, "code": { "enum": [ "PERMISSION_DENIED" ] } } } ] } } }, "description": "" }, "404": { "content": { "application/json": { "examples": { "GENERIC_404_NOT_FOUND": { "description": "Resource is not found", "value": { "status": 404, "code": "NOT_FOUND", "message": "The specified resource is not found." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 404 ] }, "code": { "enum": [ "NOT_FOUND" ] } } } ] } } }, "description": "" } } } }, "/passthrough/camara/v1/number-verification/number-verification/v2/verify": { "post": { "tags": [ "Number Verification v2.1" ], "summary": "Verifies if the received hashed/plain text phone number matches the phone number associated with the access token", "parameters": [ { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": {} }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "phoneNumberVerify-NV-V2", "description": "Verifies if the specified phone number (either in plain text or hashed format) matches the one that the user is currently using. Only one of the plain or hashed formats must be provided.\n- The number verification will be done for the user that has authenticated via mobile network\n- It returns true/false depending on if the hashed phone number received as input matches the authenticated user's `device phone number` associated to the access token\n", "responses": { "200": { "content": { "application/json": { "examples": { "Example_1": { "value": { "devicePhoneNumberVerified": true } } }, "schema": { "type": "object", "description": "Number verification result", "required": [ "devicePhoneNumberVerified" ], "properties": { "devicePhoneNumberVerified": { "description": "Number verification. True, if it matches", "type": "boolean" } } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param" } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 400 ] }, "code": { "enum": [ "INVALID_ARGUMENT" ] } } } ] } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "GENERIC_401_UNAUTHENTICATED": { "description": "Request cannot be authenticated and a new authentication is required", "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials. A new authentication is required." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 401 ] }, "code": { "enum": [ "UNAUTHENTICATED" ] } } } ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "GENERIC_403_USER_NOT_AUTHENTICATED_BY_MOBILE_NETWORK": { "value": { "status": 403, "code": "NUMBER_VERIFICATION.USER_NOT_AUTHENTICATED_BY_MOBILE_NETWORK", "message": "Client must authenticate via the mobile network to use this service" } }, "GENERIC_403_PERMISSION_DENIED": { "description": "Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security", "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 403 ] }, "code": { "enum": [ "PERMISSION_DENIED", "NUMBER_VERIFICATION.USER_NOT_AUTHENTICATED_BY_MOBILE_NETWORK" ] } } } ] } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "NUMBER_VERIFY_TRUE_PHONE_NUMBER": { "value": { "phoneNumber": "+99999991000" } }, "NUMBER_VERIFY_FALSE_PHONE_NUMBER": { "value": { "phoneNumber": "+99999991001" } }, "NUMBER_VERIFY_PHONE_NUMBER_EMPTY_CREDENTIAL": { "value": { "phoneNumber": "+99999991000", "credential": null } } }, "schema": { "description": "Payload to verify the phone number. Exactly one of `phoneNumber` or `hashedPhoneNumber` is required; `credential` is optional.", "oneOf": [ { "type": "object", "additionalProperties": false, "required": [ "phoneNumber" ], "properties": { "phoneNumber": { "type": "string", "pattern": "^\\+[1-9][0-9]{4,14}$", "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 '+'." }, "credential": { "description": "Nokia proprietary optional field. Encoded SD-JWT; when extracted and decoded, it may contain the TS.43 operator token and related claims.\n" } } }, { "type": "object", "additionalProperties": false, "required": [ "hashedPhoneNumber" ], "properties": { "hashedPhoneNumber": { "description": "Hashed phone number. SHA-256 (in hexadecimal representation) of the mobile phone number in **E.164 format (starting with country code)**. Prefixed with '+'.", "type": "string", "pattern": "^[a-fA-F0-9]{64}$" }, "credential": { "description": "Nokia proprietary optional field. Encoded SD-JWT; when extracted and decoded, it may contain the TS.43 operator token and related claims.\n" } } } ] } } }, "description": "" } } }, "/slice/v1/slices/{id}/activate": { "post": { "tags": [ "Network Slicing v1.0.0" ], "summary": "Activate a network slice.", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "maxLength": 36, "title": "Id" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "activate_slice", "description": "Activate a network slice.", "responses": { "202": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": "Accepted" } } }, "schema": { "properties": { "status": { "type": "string", "maxLength": 20, "title": "Status", "default": "Accepted" } }, "type": "object", "title": "Accepted" } } }, "description": "" }, "422": { "content": { "application/json": { "examples": { "Example_1": { "value": { "detail": [ { "loc": [], "msg": "", "type": "" } ] } } }, "schema": { "properties": { "detail": { "items": { "properties": { "loc": { "type": "array", "items": { "type": "string" }, "title": "Location" }, "msg": { "type": "string", "title": "Message" }, "type": { "type": "string", "title": "Error Type" } }, "type": "object", "required": [ "loc", "msg", "type" ], "title": "ValidationError" }, "type": "array", "title": "Detail" } }, "type": "object", "title": "HTTPValidationError" } } }, "description": "" } } } }, "/location-verification/v0/verify": { "post": { "tags": [ "Location Verification v0.2.0" ], "summary": "Verify the location of a device", "operationId": "verifyLocation-LocV-V0", "description": "Verify whether the location of a device is within a requested area. The operation returns a verification result and, optionally, a match rate estimation for the location verification in percent.\n", "responses": { "200": { "content": { "application/json": { "examples": { "VERIFICATION_TRUE": { "description": "The network locates the device within the requested area", "value": { "verificationResult": "TRUE", "lastLocationTime": "2023-09-07T10:40:52.000Z" } }, "VERIFICATION_PARTIAL": { "description": "The requested area partially matches the area where the network locates the device", "value": { "verificationResult": "PARTIAL", "matchRate": 74, "lastLocationTime": "2023-09-07T10:40:52.000Z" } }, "VERIFICATION_UNKNOWN_WITH_LAST_LOCATION_TIME": { "description": "The network cannot locate the device after the requested maxAge", "value": { "verificationResult": "UNKNOWN", "lastLocationTime": "2023-09-07T10:40:52.000Z" } }, "VERIFICATION_UNKNOWN_WITHOUT_LAST_LOCATION_TIME": { "description": "The network cannot locate the device and there is no history available", "value": { "verificationResult": "UNKNOWN" } }, "VERIFICATION_FALSE": { "description": "The requested area does not match the area where the network locates the device", "value": { "verificationResult": "FALSE", "lastLocationTime": "2023-09-07T10:40:52.000Z" } } }, "schema": { "type": "object", "required": [ "verificationResult" ], "properties": { "lastLocationTime": { "description": "Timestamp of the last location information. It must follow RFC 3339 and must have time zone. Recommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)", "format": "date-time", "type": "string" }, "verificationResult": { "description": "Result of a verification request:\n - `TRUE`: when the network locates the device within the requested area, \n - `FALSE`: when the requested area does not match the area where the network locates the device,\n - `UNKNOWN`: when the network cannot locate the device,\n - `PARTIAL`: when the requested area partially match the area where the network locates the device. A `match_rate` could be included in the response.\n", "type": "string", "enum": [ "TRUE", "FALSE", "UNKNOWN", "PARTIAL" ] }, "matchRate": { "description": "Estimation of the match rate between the area in the request (R), and area where the network locates the device (N), calculated as the percent value of the intersection of both areas divided by the network area, that is (R ∩ N) / N * 100. Included only if VerificationResult is PARTIAL.", "type": "integer", "minimum": 1, "maximum": 99 } } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Invalid argument" } } }, "schema": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } } } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Authorization failed: ..." } } }, "schema": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } } } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Operation not allowed: ..." } } }, "schema": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } } } } }, "description": "" }, "404": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 404, "code": "NOT_FOUND", "message": "The specified resource is not found" } } }, "schema": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } } } } }, "description": "" }, "500": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 500, "code": "INTERNAL", "message": "Internal server error" } } }, "schema": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } } } } }, "description": "" }, "503": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 503, "code": "UNAVAILABLE", "message": "Service unavailable" } } }, "schema": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } } } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "DEVICE_INSIDE_AREA_FALSE_PHONE_NUMBER": { "value": { "device": { "phoneNumber": "+99999991000" }, "area": { "areaType": "CIRCLE", "center": { "latitude": 50.735851, "longitude": 7.10066 }, "radius": 50000 } } }, "DEVICE_INSIDE_AREA_TRUE_PHONE_NUMBER": { "value": { "device": { "phoneNumber": "+99999991001" }, "area": { "areaType": "CIRCLE", "center": { "latitude": 50.735851, "longitude": 7.10066 }, "radius": 50000 } } } }, "schema": { "type": "object", "properties": { "device": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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.\n", "type": "object", "properties": { "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, optionally prefixed with '+'.", "type": "string", "pattern": "^\\+?[0-9]{5,15}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 }, "area": { "type": "object", "properties": { "areaType": { "type": "string", "description": "Type of this area.\nCIRCLE - The area is defined as a circle.\n", "enum": [ "CIRCLE" ] } }, "required": [ "areaType" ] }, "maxAge": { "description": "The maximum age (in seconds) of the available location, which is accepted for the verification.", "type": "integer", "minimum": 60 } }, "required": [ "device", "area" ] } } }, "description": "" }, "parameters": [ { "$ref": "#/components/parameters/x-rapidapi-host" } ] } }, "/slice/v1/slices/{id}/deactivate": { "post": { "tags": [ "Network Slicing v1.0.0" ], "summary": "Deactivate a network slice.", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "maxLength": 36, "title": "Id" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "deactivate_slice", "description": "Deactivate a network slice. The slice state must be active to be able to perform this operation.", "responses": { "202": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": "Accepted" } } }, "schema": { "properties": { "status": { "type": "string", "maxLength": 20, "title": "Status", "default": "Accepted" } }, "type": "object", "title": "Accepted" } } }, "description": "" }, "422": { "content": { "application/json": { "examples": { "Example_1": { "value": { "detail": [ { "loc": [], "msg": "", "type": "" } ] } } }, "schema": { "properties": { "detail": { "items": { "properties": { "loc": { "type": "array", "items": { "type": "string" }, "title": "Location" }, "msg": { "type": "string", "title": "Message" }, "type": { "type": "string", "title": "Error Type" } }, "type": "object", "required": [ "loc", "msg", "type" ], "title": "ValidationError" }, "type": "array", "title": "Detail" } }, "type": "object", "title": "HTTPValidationError" } } }, "description": "" } } } }, "/geofencing-subscriptions/v0.3/subscriptions/{subscriptionId}": { "delete": { "tags": [ "Geofencing v0.3.0" ], "summary": "Delete a Geofencing event subscription", "parameters": [ { "name": "subscriptionId", "in": "path", "required": true, "description": "Subscription identifier that was obtained from the create event subscription operation", "schema": { "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).", "default": "qs15-h556-rt89-1298" } }, { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": { "type": "string" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "deleteGeofencingSubscription", "description": "delete a given Geofencing subscription.", "responses": { "202": { "content": { "application/json": { "examples": { "Example_1": { "value": { "id": "qs15-h556-rt89-1298" } } }, "schema": { "description": "Response for a event-type subscription request managed asynchronously (Creation or Deletion)", "type": "object", "properties": { "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)." } } } } }, "description": "" }, "204": { "content": { "application/json": { "examples": { "Example_1": { "value": {} } }, "schema": {} } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "Generic400": { "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param" } }, "subscriptionIdRequired": { "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Expected property is missing: subscriptionId" } } }, "schema": { "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" } } } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials." } } }, "schema": { "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" } } } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action" } } }, "schema": { "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" } } } } }, "description": "" }, "404": { "content": { "application/json": { "examples": { "GENERIC_404_NOT_FOUND": { "description": "Resource is not found", "value": { "status": 404, "code": "NOT_FOUND", "message": "The specified resource is not found." } } }, "schema": { "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" } } } } }, "description": "" }, "429": { "content": { "application/json": { "examples": { "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." } }, "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." } } }, "schema": { "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" } } } } }, "description": "" }, "500": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 500, "code": "INTERNAL", "message": "Server error" } } }, "schema": { "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" } } } } }, "description": "" }, "503": { "content": { "application/json": { "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." } } }, "schema": { "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" } } } } }, "description": "" } } }, "get": { "tags": [ "Geofencing v0.3.0" ], "summary": "Operation to retrieve a subscription based on the provided ID", "parameters": [ { "name": "subscriptionId", "in": "path", "required": true, "description": "Subscription identifier that was obtained from the create event subscription operation", "schema": { "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).", "default": "qs15-h556-rt89-1298" } }, { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": { "type": "string" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "retrieveGeofencingSubscription", "description": "retrieve Geofencing subscription information for a given subscription ID.", "responses": { "200": { "content": { "application/json": { "examples": { "Example_1": { "value": { "protocol": "HTTP", "sink": "https://endpoint.example.com/sink", "sinkCredential": { "credentialType": "PLAIN" }, "types": [], "config": { "subscriptionDetail": { "device": { "phoneNumber": "+123456789", "networkAccessIdentifier": "123456789@domain.com", "ipv4Address": { "publicAddress": "84.125.93.10", "privateAddress": "84.125.93.10", "publicPort": 0 }, "ipv6Address": "2001:db8:85a3:8d3:1319:8a2e:370:7344" }, "area": { "areaType": "CIRCLE" } }, "subscriptionExpireTime": "2023-01-17T13:18:23.682Z", "subscriptionMaxEvents": 5, "initialEvent": true }, "id": "1119920371", "startsAt": "", "expiresAt": "", "status": "ACTIVATION_REQUESTED" } } }, "schema": { "description": "Represents a event-type subscription.", "type": "object", "required": [ "sink", "protocol", "config", "types", "id", "startsAt" ], "properties": { "protocol": { "type": "string", "enum": [ "HTTP", "MQTT3", "MQTT5", "AMQP", "NATS", "KAFKA" ], "description": "Identifier of a delivery protocol. Only HTTP is allowed for now" }, "sink": { "type": "string", "format": "url", "description": "The address to which events shall be delivered using the selected protocol." }, "sinkCredential": { "type": "object", "properties": { "credentialType": { "type": "string", "enum": [ "PLAIN", "ACCESSTOKEN", "REFRESHTOKEN" ], "description": "The type of the credential." } }, "required": [ "credentialType" ] }, "types": { "description": "Camara Event types eligible to be delivered by this subscription.\n", "type": "array", "items": { "type": "string" } }, "config": { "description": "Implementation-specific configuration parameters needed by the subscription manager for acquiring events.\nIn CAMARA we have predefined attributes like `subscriptionExpireTime`, `subscriptionMaxEvents`, `initialEvent`\nSpecific event type attributes must be defined in `subscriptionDetail`\nNote: if a request is performed for several event type, all subscribed event will use same `config` parameters.\n", "type": "object", "required": [ "subscriptionDetail" ], "properties": { "subscriptionDetail": { "description": "The detail of the requested event subscription", "type": "object", "properties": { "device": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE1: 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.\nNOTE2: 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.\n", "type": "object", "properties": { "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}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 }, "area": { "type": "object", "properties": { "areaType": { "type": "string", "description": "Type of this area.\nCIRCLE - The area is defined as a circle.\nPOI - The area is defined by a named point of interest.\n", "enum": [ "CIRCLE", "POI" ] } }, "required": [ "areaType" ] } }, "required": [ "device", "area" ] }, "subscriptionExpireTime": { "type": "string", "format": "date-time", "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 }, "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.\nExample: Consumer request area entered event. If consumer sets initialEvent to true and device is already in the geofence, an event is triggered\n" } } }, "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)." }, "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\n\n\n\n\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" ] } } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "subscriptionIdRequired": { "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Expected property is missing: subscriptionId" } }, "Generic400": { "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param" } } }, "schema": { "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" } } } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials." } } }, "schema": { "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" } } } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action" } } }, "schema": { "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" } } } } }, "description": "" }, "404": { "content": { "application/json": { "examples": { "GENERIC_404_NOT_FOUND": { "description": "Resource is not found", "value": { "status": 404, "code": "NOT_FOUND", "message": "The specified resource is not found." } } }, "schema": { "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" } } } } }, "description": "" }, "429": { "content": { "application/json": { "examples": { "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." } }, "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." } } }, "schema": { "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" } } } } }, "description": "" }, "500": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 500, "code": "INTERNAL", "message": "Server error" } } }, "schema": { "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" } } } } }, "description": "" }, "503": { "content": { "application/json": { "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." } } }, "schema": { "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" } } } } }, "description": "" } } } }, "/passthrough/camara/v1/number-recycling/number-recycling/v0.2/check": { "post": { "tags": [ "Number Recycling v0.2" ], "summary": "Check whether the subscriber of the phone number has changed.", "parameters": [ { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": {} }, { "name": "authorization", "in": "header", "required": false, "description": "authorization header for token", "schema": { "type": "string" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "checkNumberRecycling", "description": "Check whether the subscriber of the phone number has changed.", "responses": { "200": { "content": { "application/json": { "examples": { "Example_1": { "value": { "phoneNumberRecycled": true } } }, "schema": { "type": "object", "required": [ "phoneNumberRecycled" ], "properties": { "phoneNumberRecycled": { "type": "boolean", "description": "Set to true (Boolean, not string) when there has been a change in the subscriber associated with the specific phone number after “specifiedDate”.\n" } } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "OutOfRange": { "description": "Out of Range. Specific Syntax Exception used when a given field has a pre-defined range or a invalid filter criteria combination is requested", "value": { "status": 400, "code": "OUT_OF_RANGE", "message": "Client specified an invalid range." } }, "InvalidArgument": { "description": "Invalid Argument. Generic Syntax Exception", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 400 ] }, "code": { "enum": [ "INVALID_ARGUMENT", "OUT_OF_RANGE" ] } } } ] } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "Unauthenticated": { "description": "Request cannot be authenticated and a new authentication is required", "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials. A new authentication is required." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 401 ] }, "code": { "enum": [ "UNAUTHENTICATED" ] } } } ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "Permission Denied": { "description": "Permission denied. OAuth2 token access not have the required scope or when the user fails operational security", "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action" } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 403 ] }, "code": { "enum": [ "PERMISSION_DENIED" ] } } } ] } } }, "description": "" }, "404": { "content": { "application/json": { "examples": { "Phone Number Used By Different Network Operator": { "description": "Provided phone number is used by a different network operator", "value": { "status": 404, "code": "IDENTIFIER_NOT_FOUND", "message": "Phone number not found." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 404 ] }, "code": { "enum": [ "IDENTIFIER_NOT_FOUND" ] } } } ] } } }, "description": "" }, "422": { "content": { "application/json": { "examples": { "Unnecessary Identifier": { "description": "An explicit identifier is provided when a phone number has already been identified from the access token", "value": { "status": 422, "code": "UNNECESSARY_IDENTIFIER", "message": "The phone number is already identified by the access token" } }, "Missing Identifier": { "description": "An identifier is not included in the request and the phone number identification cannot be derived from the 3-legged access token", "value": { "status": 422, "code": "MISSING_IDENTIFIER", "message": "The phone number cannot be identified" } }, "Device Not Applicable": { "description": "Service not applicable for the provided phone number", "value": { "status": 422, "code": "SERVICE_NOT_APPLICABLE", "message": "The service is not available for the provided phone number" } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 422 ] }, "code": { "enum": [ "SERVICE_NOT_APPLICABLE", "MISSING_IDENTIFIER", "UNNECESSARY_IDENTIFIER" ] } } } ] } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "CHECK_NUMBER_RECYCLING_TRUE": { "value": { "phoneNumber": "+99999991000", "specifiedDate": "2024-10-31" } }, "CHECK_NUMBER_RECYCLING_FALSE": { "value": { "phoneNumber": "+99999991001", "specifiedDate": "2024-10-31" } }, "CHECK_NUMBER_RECYCLING_REQUEST_3_LEGGED_TRUE": { "value": { "specifiedDate": "2024-10-31" } } }, "schema": { "type": "object", "required": [ "specifiedDate" ], "properties": { "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}$" }, "specifiedDate": { "type": "string", "format": "date", "description": "Specified date to check whether there has been a change in the subscriber associated with the specific phone number, in RFC 3339 calendar date format (YYYY-MM-DD)." } } } } }, "description": "" } } }, "/qod/v0/sessions/{sessionId}/extend": { "post": { "tags": [ "Quality-of-Service on Demand v0.10.1" ], "summary": "Extend the duration of an active session", "parameters": [ { "name": "sessionId", "in": "path", "required": true, "description": "Session ID that was obtained from the createSession operation", "schema": { "description": "Session ID in UUID format", "type": "string", "format": "uuid" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "extendQosSessionDuration", "description": "Extend the overall duration of an active QoS session. If this operation is executed successfully, the new duration of the target session will be the original duration plus the additionally requested duration.\nThe new remaining duration of the QoS session shall not exceed the maximum remaining duration limit (currently fixed at 86,400 seconds) where the remaining duration is calculated as the difference between the `expiresAt` and current time when the request to extend the session duration is received. If this maximum limit would be exceeded, the overall duration shall be set such that the remaining duration is equal to this limit.\nAn example: A QoD session was originally created with duration 80,000 seconds. 10,000 seconds later, the developer requested to extend the session by 20,000 seconds.\n- Original duration: 80,000 seconds\n- Elapsed time: 10,000 seconds\n- Remaining duration: 70,000 seconds\n- New remaining duration: 86,400 seconds (the maximum allowed)\n- New overall session duration: 96,400 seconds\n", "responses": { "200": { "content": { "application/json": { "examples": { "Example_1": { "value": { "device": { "phoneNumber": "123456789", "networkAccessIdentifier": "123456789@domain.com", "ipv4Address": { "publicAddress": "84.125.93.10", "privateAddress": "84.125.93.10", "publicPort": 0 }, "ipv6Address": "2001:db8:85a3:8d3:1319:8a2e:370:7344" }, "applicationServer": { "ipv4Address": "192.168.0.1/24", "ipv6Address": "2001:db8:85a3:8d3:1319:8a2e:370:7344" }, "devicePorts": { "ranges": [ { "from": 0, "to": 0 } ], "ports": [] }, "applicationServerPorts": { "ranges": [ { "from": 0, "to": 0 } ], "ports": [] }, "qosProfile": "QCI_1_voice", "webhook": { "notificationUrl": "https://application-server.com", "notificationAuthToken": "c8974e592c2fa383d4a3960714" }, "sessionId": "", "duration": 86400, "startedAt": 1639479600, "expiresAt": 1639566000, "qosStatus": "REQUESTED", "messages": [ { "severity": "INFO", "description": "" } ] } } }, "schema": { "description": "Session related information.", "allOf": [ { "description": "Common attributes of a QoD session", "type": "object", "properties": { "device": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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\n", "type": "object", "properties": { "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, optionally prefixed with '+'.", "type": "string", "pattern": "^\\+?[0-9]{5,15}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n\nThe session shall apply to all IP flows between the device subnet and the specified application server, unless further restricted by the optional parameters devicePorts or applicationServerPorts.\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 }, "applicationServer": { "description": "A server hosting backend applications to deliver some business logic to clients.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n", "type": "object", "properties": { "ipv4Address": { "type": "string", "description": "IPv4 address may be specified in form
as:\n - address - an IPv4 number in dotted-quad form 1.2.3.4. Only this exact IP number will match the flow control rule.\n - address/mask - an IP number as above with a mask width of the form 1.2.3.4/24.\n In this case, all IP numbers from 1.2.3.0 to 1.2.3.255 will match. The bit width MUST be valid for the IP version.\n" }, "ipv6Address": { "type": "string", "description": "IPv6 address may be specified in form
as:\n - address - The /128 subnet is optional for single addresses:\n - 2001:db8:85a3:8d3:1319:8a2e:370:7344\n - 2001:db8:85a3:8d3:1319:8a2e:370:7344/128\n - address/mask - an IP v6 number with a mask:\n - 2001:db8:85a3:8d3::0/64\n - 2001:db8:85a3:8d3::/64\n" } }, "minProperties": 1 }, "devicePorts": { "description": "The ports used locally by the device for flows to which the requested QoS profile should apply. If omitted, then the qosProfile will apply to all flows between the device and the specified application server address and ports", "allOf": [ { "type": "object", "minProperties": 1, "properties": { "ranges": { "type": "array", "minItems": 1, "items": { "type": "object", "required": [ "from", "to" ], "properties": { "from": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 }, "to": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } }, "ports": { "type": "array", "minItems": 1, "items": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } } ] }, "applicationServerPorts": { "description": "A list of single ports or port ranges on the application server", "allOf": [ { "type": "object", "minProperties": 1, "properties": { "ranges": { "type": "array", "minItems": 1, "items": { "type": "object", "required": [ "from", "to" ], "properties": { "from": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 }, "to": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } }, "ports": { "type": "array", "minItems": 1, "items": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } } ] }, "qosProfile": { "description": "A unique name for identifying a specific QoS profile.\nThis may follow different formats depending on the service providers implementation.\nSome options addresses:\n\n\n\n\n\n - A UUID style string\n - Support for predefined profiles QOS_S, QOS_M, QOS_L, and QOS_E\n - A searchable descriptive name\n", "type": "string", "minLength": 3, "maxLength": 256, "format": "string", "pattern": "^[a-zA-Z0-9_.-]+$" }, "webhook": { "type": "object", "required": [ "notificationUrl" ], "properties": { "notificationUrl": { "type": "string", "format": "uri", "description": "Allows asynchronous delivery of session related events" }, "notificationAuthToken": { "type": "string", "minLength": 20, "maxLength": 256, "description": "Authentication token for callback API" } } } }, "required": [ "device", "applicationServer", "qosProfile" ] }, { "type": "object", "properties": { "sessionId": { "description": "Session ID in UUID format", "type": "string", "format": "uuid" }, "duration": { "type": "integer", "format": "int32", "minimum": 1, "maximum": 2147483647 }, "startedAt": { "type": "integer", "description": "Timestamp of session start in seconds since Unix epoch", "format": "int64", "minimum": -9223372036854776000, "maximum": 9223372036854776000 }, "expiresAt": { "type": "integer", "description": "Timestamp of session expiration if the session was not deleted, in seconds since Unix epoch", "format": "int64", "minimum": -9223372036854776000, "maximum": 9223372036854776000 }, "qosStatus": { "description": "The current status of the requested QoS session. The status can be one of the following:\n* `REQUESTED` - QoS has been requested by creating a session\n* `AVAILABLE` - The requested QoS has been provided by the network\n* `UNAVAILABLE` - The requested QoS cannot be provided by the network due to some reason\n", "type": "string", "enum": [ "REQUESTED", "AVAILABLE", "UNAVAILABLE" ] }, "messages": { "type": "array", "items": { "type": "object", "properties": { "severity": { "description": "Message severity", "type": "string", "enum": [ "INFO", "WARNING" ] }, "description": { "description": "Detailed message text", "type": "string" } }, "required": [ "severity", "description" ] } } }, "required": [ "sessionId", "duration", "startedAt", "expiresAt", "qosStatus" ] } ] } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "Generic400": { "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Schema validation failed at ..." } }, "InactiveSession": { "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "The target session is inactive" } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Authorization failed: ..." } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Operation not allowed: ..." } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "404": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 404, "code": "NOT_FOUND", "message": "Session Id does not exist" } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "500": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 500, "code": "INTERNAL", "message": "Internal server error: ..." } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "503": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 503, "code": "UNAVAILABLE", "message": "Service unavailable" } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "Example_1": { "value": { "requestedAdditionalDuration": 60 } } }, "schema": { "description": "Attributes required to extend the duration of an active session", "type": "object", "properties": { "requestedAdditionalDuration": { "description": "Additional duration in seconds to be extended.\n", "type": "integer", "format": "int32", "minimum": 1, "maximum": 86399 } }, "required": [ "requestedAdditionalDuration" ] } } }, "description": "" } } }, "/device-status/v0/subscriptions": { "post": { "tags": [ "Device Status v0.5.1" ], "summary": "Create a device status event subscription for a device", "operationId": "createDeviceStatusSubscription", "description": "Create a device status event subscription for a device", "responses": { "201": { "content": { "application/json": { "examples": { "Example_1": { "value": { "subscriptionDetail": { "device": { "phoneNumber": "123456789", "networkAccessIdentifier": "123456789@domain.com", "ipv4Address": { "publicAddress": "84.125.93.10", "privateAddress": "84.125.93.10", "publicPort": 0 }, "ipv6Address": "2001:db8:85a3:8d3:1319:8a2e:370:7344" }, "type": "org.camaraproject.device-status.v0.roaming-status" }, "subscriptionExpireTime": "2023-01-17T13:18:23.682Z", "webhook": { "notificationUrl": "https://application-server.com", "notificationAuthToken": "c8974e592c2fa383d4a3960714" }, "subscriptionId": "qs15-h556-rt89-1298", "startsAt": "", "expiresAt": "" } } }, "schema": { "description": "Represents a device status subscription.", "allOf": [ { "description": "The request for creating a Device Status event subscription", "type": "object", "required": [ "webhook", "subscriptionDetail" ], "properties": { "subscriptionDetail": { "description": "The detail of the requested event subscription", "type": "object", "required": [ "type", "device" ], "properties": { "device": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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.\n", "type": "object", "properties": { "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, optionally prefixed with '+'.", "type": "string", "pattern": "^\\+?[0-9]{5,15}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 }, "type": { "type": "string", "description": "roaming-status - Event triggered when the device switch from roaming ON to roaming OFF and conversely\n\nroaming-on - Event triggered when the device switch from roaming OFF to roaming ON\n\nroaming-off - Event triggered when the device switch from roaming ON to roaming OFF\n\nroaming-change-country - Event triggered when the device in roaming change country code\n\nconnectivity-data - Event triggered when the device is connected to the network for Data usage.\n\nconnectivity-sms - Event triggered when the device is connected to the network for SMS usage\n\nconnectivity-disconnected - Event triggered when the device is not connected.\n", "enum": [ "org.camaraproject.device-status.v0.roaming-status", "org.camaraproject.device-status.v0.roaming-on", "org.camaraproject.device-status.v0.roaming-off", "org.camaraproject.device-status.v0.roaming-change-country", "org.camaraproject.device-status.v0.connectivity-data", "org.camaraproject.device-status.v0.connectivity-sms", "org.camaraproject.device-status.v0.connectivity-disconnected" ] } } }, "subscriptionExpireTime": { "type": "string", "format": "date-time", "description": "The subscription expiration time in date-time format." }, "webhook": { "description": "Webhook information for event channel", "type": "object", "required": [ "notificationUrl" ], "properties": { "notificationUrl": { "type": "string", "description": "https callback address where the event notification must be POST-ed" }, "notificationAuthToken": { "type": "string", "description": "OAuth2 token to be used by the callback API endpoint. It MUST be indicated within HTTP Authorization header e.g. Authorization: Bearer $notificationAuthToken\n" } } } } }, { "type": "object", "properties": { "subscriptionId": { "type": "string", "description": "The event subscription identifier." }, "startsAt": { "type": "string", "format": "date-time", "description": "date time when subscription started" }, "expiresAt": { "type": "string", "format": "date-time", "description": "date time when subscription will expire or expired" } }, "required": [ "subscriptionId" ] } ] } } }, "description": "" }, "202": { "content": { "application/json": { "examples": { "Example_1": { "value": { "subscriptionId": "qs15-h556-rt89-1298" } } }, "schema": { "description": "Response for a device status operation managed asynchronously (Creation or Deletion)", "type": "object", "properties": { "subscriptionId": { "type": "string", "description": "The event subscription identifier." } } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param" } } }, "schema": { "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" } } } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials" } } }, "schema": { "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" } } } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action" } } }, "schema": { "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" } } } } }, "description": "" }, "409": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 409, "code": "CONFLICT", "message": "The specified resource is in a conflict" } } }, "schema": { "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" } } } } }, "description": "" }, "500": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 500, "code": "INTERNAL", "message": "Server error" } } }, "schema": { "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" } } } } }, "description": "" }, "503": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 503, "code": "UNAVAILABLE", "message": "Service unavailable" } } }, "schema": { "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" } } } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "CREATE_DEVICE_STATUS_SUBSCRIPTION": { "value": { "subscriptionDetail": { "device": { "phoneNumber": "+36719991000" }, "type": "org.camaraproject.device-status.v0.roaming-status" }, "subscriptionExpireTime": "2026-01-17T13:18:23.682Z", "webhook": { "notificationUrl": "https://application-server.com", "notificationAuthToken": "c8974e592c2fa383d4a3960714" } } } }, "schema": { "description": "The request for creating a Device Status event subscription", "type": "object", "required": [ "webhook", "subscriptionDetail" ], "properties": { "subscriptionDetail": { "description": "The detail of the requested event subscription", "type": "object", "required": [ "type", "device" ], "properties": { "device": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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.\n", "type": "object", "properties": { "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, optionally prefixed with '+'.", "type": "string", "pattern": "^\\+?[0-9]{5,15}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 }, "type": { "type": "string", "description": "roaming-status - Event triggered when the device switch from roaming ON to roaming OFF and conversely\n\nroaming-on - Event triggered when the device switch from roaming OFF to roaming ON\n\nroaming-off - Event triggered when the device switch from roaming ON to roaming OFF\n\nroaming-change-country - Event triggered when the device in roaming change country code\n\nconnectivity-data - Event triggered when the device is connected to the network for Data usage.\n\nconnectivity-sms - Event triggered when the device is connected to the network for SMS usage\n\nconnectivity-disconnected - Event triggered when the device is not connected.\n", "enum": [ "org.camaraproject.device-status.v0.roaming-status", "org.camaraproject.device-status.v0.roaming-on", "org.camaraproject.device-status.v0.roaming-off", "org.camaraproject.device-status.v0.roaming-change-country", "org.camaraproject.device-status.v0.connectivity-data", "org.camaraproject.device-status.v0.connectivity-sms", "org.camaraproject.device-status.v0.connectivity-disconnected" ] } } }, "subscriptionExpireTime": { "type": "string", "format": "date-time", "description": "The subscription expiration time in date-time format." }, "webhook": { "description": "Webhook information for event channel", "type": "object", "required": [ "notificationUrl" ], "properties": { "notificationUrl": { "type": "string", "description": "https callback address where the event notification must be POST-ed" }, "notificationAuthToken": { "type": "string", "description": "OAuth2 token to be used by the callback API endpoint. It MUST be indicated within HTTP Authorization header e.g. Authorization: Bearer $notificationAuthToken\n" } } } } } } }, "description": "" }, "parameters": [ { "$ref": "#/components/parameters/x-rapidapi-host" } ] }, "get": { "tags": [ "Device Status v0.5.1" ], "summary": "Retrieve a list of device status event subscription", "operationId": "retrieveSubscriptionList", "description": "Retrieve a list of device status event subscription(s)", "responses": { "200": { "content": { "application/json": { "examples": { "Example_1": { "value": [ { "subscriptionDetail": { "device": { "phoneNumber": "123456789", "networkAccessIdentifier": "123456789@domain.com", "ipv4Address": { "publicAddress": "84.125.93.10", "privateAddress": "84.125.93.10", "publicPort": 0 }, "ipv6Address": "2001:db8:85a3:8d3:1319:8a2e:370:7344" }, "type": "org.camaraproject.device-status.v0.roaming-status" }, "subscriptionExpireTime": "2023-01-17T13:18:23.682Z", "webhook": { "notificationUrl": "https://application-server.com", "notificationAuthToken": "c8974e592c2fa383d4a3960714" }, "subscriptionId": "qs15-h556-rt89-1298", "startsAt": "", "expiresAt": "" } ] } }, "schema": { "type": "array", "items": { "description": "Represents a device status subscription.", "allOf": [ { "description": "The request for creating a Device Status event subscription", "type": "object", "required": [ "webhook", "subscriptionDetail" ], "properties": { "subscriptionDetail": { "description": "The detail of the requested event subscription", "type": "object", "required": [ "type", "device" ], "properties": { "device": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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.\n", "type": "object", "properties": { "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, optionally prefixed with '+'.", "type": "string", "pattern": "^\\+?[0-9]{5,15}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 }, "type": { "type": "string", "description": "roaming-status - Event triggered when the device switch from roaming ON to roaming OFF and conversely\n\nroaming-on - Event triggered when the device switch from roaming OFF to roaming ON\n\nroaming-off - Event triggered when the device switch from roaming ON to roaming OFF\n\nroaming-change-country - Event triggered when the device in roaming change country code\n\nconnectivity-data - Event triggered when the device is connected to the network for Data usage.\n\nconnectivity-sms - Event triggered when the device is connected to the network for SMS usage\n\nconnectivity-disconnected - Event triggered when the device is not connected.\n", "enum": [ "org.camaraproject.device-status.v0.roaming-status", "org.camaraproject.device-status.v0.roaming-on", "org.camaraproject.device-status.v0.roaming-off", "org.camaraproject.device-status.v0.roaming-change-country", "org.camaraproject.device-status.v0.connectivity-data", "org.camaraproject.device-status.v0.connectivity-sms", "org.camaraproject.device-status.v0.connectivity-disconnected" ] } } }, "subscriptionExpireTime": { "type": "string", "format": "date-time", "description": "The subscription expiration time in date-time format." }, "webhook": { "description": "Webhook information for event channel", "type": "object", "required": [ "notificationUrl" ], "properties": { "notificationUrl": { "type": "string", "description": "https callback address where the event notification must be POST-ed" }, "notificationAuthToken": { "type": "string", "description": "OAuth2 token to be used by the callback API endpoint. It MUST be indicated within HTTP Authorization header e.g. Authorization: Bearer $notificationAuthToken\n" } } } } }, { "type": "object", "properties": { "subscriptionId": { "type": "string", "description": "The event subscription identifier." }, "startsAt": { "type": "string", "format": "date-time", "description": "date time when subscription started" }, "expiresAt": { "type": "string", "format": "date-time", "description": "date time when subscription will expire or expired" } }, "required": [ "subscriptionId" ] } ] } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param" } } }, "schema": { "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" } } } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials" } } }, "schema": { "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" } } } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action" } } }, "schema": { "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" } } } } }, "description": "" }, "500": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 500, "code": "INTERNAL", "message": "Server error" } } }, "schema": { "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" } } } } }, "description": "" }, "503": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 503, "code": "UNAVAILABLE", "message": "Service unavailable" } } }, "schema": { "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" } } } } }, "description": "" } }, "parameters": [ { "$ref": "#/components/parameters/x-rapidapi-host" } ] } }, "/quality-on-demand/v1/sessions/{sessionId}": { "delete": { "tags": [ "Quality-of-Service on Demand v1.0.0" ], "summary": "Delete a QoS session", "parameters": [ { "name": "sessionId", "in": "path", "required": true, "description": "Session ID that was obtained from the createSession operation", "schema": { "description": "Session ID in UUID format", "type": "string", "format": "uuid" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "deleteSession-QoD-V1", "description": "Release resources related to QoS session\n\nIf the notification callback is provided and the `qosStatus` of the session was `AVAILABLE` the client will receive in addition to the response a `QOS_STATUS_CHANGED` event with\n- `qosStatus` as `UNAVAILABLE` and\n- `statusInfo` as `DELETE_REQUESTED`\nThere will be no notification event if the `qosStatus` was already `UNAVAILABLE`.\n", "responses": { "204": { "content": { "application/json": { "examples": { "Example_1": { "value": {} } }, "schema": {} } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Schema validation failed at ..." } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Authorization failed: ..." } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Operation not allowed: ..." } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "404": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 404, "code": "NOT_FOUND", "message": "Session Id does not exist" } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "500": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 500, "code": "INTERNAL", "message": "Internal server error: ..." } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "503": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 503, "code": "UNAVAILABLE", "message": "Service unavailable" } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" } } }, "get": { "tags": [ "Quality-of-Service on Demand v1.0.0" ], "summary": "Get QoS session information", "parameters": [ { "name": "sessionId", "in": "path", "required": true, "description": "Session ID that was obtained from the createSession operation", "schema": { "description": "Session ID in UUID format", "type": "string", "format": "uuid" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "getSession-QoD-V1", "description": "Querying for QoS session resource information details", "responses": { "200": { "content": { "application/json": { "examples": { "Example_1": { "value": { "device": { "phoneNumber": "+123456789", "networkAccessIdentifier": "123456789@domain.com", "ipv4Address": { "publicAddress": "84.125.93.10", "privateAddress": "84.125.93.10", "publicPort": 0 }, "ipv6Address": "2001:db8:85a3:8d3:1319:8a2e:370:7344" }, "applicationServer": { "ipv4Address": "192.168.0.1/24", "ipv6Address": "2001:db8:85a3:8d3:1319:8a2e:370:7344" }, "devicePorts": { "ranges": [ { "from": 0, "to": 0 } ], "ports": [] }, "applicationServerPorts": { "ranges": [ { "from": 0, "to": 0 } ], "ports": [] }, "qosProfile": "QCI_1_voice", "sink": "https://endpoint.example.com/sink", "sinkCredential": { "credentialType": "ACCESSTOKEN" }, "sessionId": "", "duration": 86400, "startedAt": "2024-06-01T12:00:00Z", "expiresAt": "2024-06-01T13:00:00Z", "qosStatus": "REQUESTED", "statusInfo": "DURATION_EXPIRED", "messages": [ { "severity": "INFO", "description": "" } ] } } }, "schema": { "description": "Session related information.", "allOf": [ { "description": "Common attributes of a QoD session", "type": "object", "properties": { "device": { "description": "End-user equipment able to connect to a network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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\n", "type": "object", "properties": { "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": "^\\+?[0-9]{5,15}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n\nThe session shall apply to all IP flows between the device subnet and the specified application server, unless further restricted by the optional parameters devicePorts or applicationServerPorts.\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 }, "applicationServer": { "description": "A server hosting backend applications to deliver some business logic to clients.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n", "type": "object", "properties": { "ipv4Address": { "type": "string", "description": "IPv4 address may be specified in form
as:\n - address - an IPv4 number in dotted-quad form 1.2.3.4. Only this exact IP number will match the flow control rule.\n - address/mask - an IP number as above with a mask width of the form 1.2.3.4/24.\n In this case, all IP numbers from 1.2.3.0 to 1.2.3.255 will match. The bit width MUST be valid for the IP version.\n" }, "ipv6Address": { "type": "string", "description": "IPv6 address may be specified in form
as:\n - address - The /128 subnet is optional for single addresses:\n - 2001:db8:85a3:8d3:1319:8a2e:370:7344\n - 2001:db8:85a3:8d3:1319:8a2e:370:7344/128\n - address/mask - an IP v6 number with a mask:\n - 2001:db8:85a3:8d3::0/64\n - 2001:db8:85a3:8d3::/64\n" } }, "minProperties": 1 }, "devicePorts": { "description": "The ports used locally by the device for flows to which the requested QoS profile should apply. If omitted, then the qosProfile will apply to all flows between the device and the specified application server address and ports", "allOf": [ { "type": "object", "minProperties": 1, "properties": { "ranges": { "type": "array", "minItems": 1, "items": { "type": "object", "required": [ "from", "to" ], "properties": { "from": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 }, "to": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } }, "ports": { "type": "array", "minItems": 1, "items": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } } ] }, "applicationServerPorts": { "description": "A list of single ports or port ranges on the application server", "allOf": [ { "type": "object", "minProperties": 1, "properties": { "ranges": { "type": "array", "minItems": 1, "items": { "type": "object", "required": [ "from", "to" ], "properties": { "from": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 }, "to": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } }, "ports": { "type": "array", "minItems": 1, "items": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } } ] }, "qosProfile": { "description": "A unique name for identifying a specific QoS profile.\nThis may follow different formats depending on the service providers implementation.\nSome options addresses:\n\n\n\n\n\n - A UUID style string\n - Support for predefined profiles QOS_S, QOS_M, QOS_L, and QOS_E\n - A searchable descriptive name\n", "type": "string", "minLength": 3, "maxLength": 256, "format": "string", "pattern": "^[a-zA-Z0-9_.-]+$" }, "sink": { "type": "string", "format": "uri", "description": "The address to which events about all status changes of the session (e.g. session termination) shall be delivered using the selected protocol." }, "sinkCredential": { "description": "A sink credential provides authentication or authorization information necessary to enable delivery of events to a target.", "allOf": [ { "type": "object", "properties": { "credentialType": { "type": "string", "enum": [ "ACCESSTOKEN" ], "description": "The type of the credential.\nNote: Type of the credential - MUST be set to ACCESSTOKEN for now\n" } }, "required": [ "credentialType" ] } ] } }, "required": [ "applicationServer", "qosProfile" ] }, { "type": "object", "properties": { "sessionId": { "description": "Session ID in UUID format", "type": "string", "format": "uuid" }, "duration": { "type": "integer", "format": "int32", "minimum": 1, "maximum": 2147483647 }, "startedAt": { "description": "Date and time when the QoS status became \"AVAILABLE\". Not to be returned when `qosStatus` is \"REQUESTED\". Format must follow RFC 3339 and must indicate time zone (UTC or local).", "type": "string", "format": "date-time" }, "expiresAt": { "description": "Date and time of the QoS session expiration. Format must follow RFC 3339 and must indicate time zone (UTC or local).\n- When `qosStatus` is \"AVAILABLE\", it is the limit time when the session is scheduled to finnish, if not terminated by other means.\n- When `qosStatus` is \"UNAVAILABLE\", it is the time when the session was terminated.\n- Not to be returned when `qosStatus` is \"REQUESTED\".\nWhen the session is extended, the value is the new expiration time of the session.\n", "type": "string", "format": "date-time" }, "qosStatus": { "description": "The current status of the requested QoS session. The status can be one of the following:\n* `REQUESTED` - QoS has been requested by creating a session\n* `AVAILABLE` - The requested QoS has been provided by the network\n* `UNAVAILABLE` - The requested QoS cannot be provided by the network due to some reason\n", "type": "string", "enum": [ "REQUESTED", "AVAILABLE", "UNAVAILABLE" ] }, "statusInfo": { "description": "Reason for the new `qosStatus`. Currently `statusInfo` is only applicable when `qosStatus` is 'UNAVAILABLE'.\n* `DURATION_EXPIRED` - Session terminated due to requested duration expired\n* `NETWORK_TERMINATED` - Network terminated the session before the requested duration expired\n* `DELETE_REQUESTED`- User requested the deletion of the session before the requested duration expired\n", "type": "string", "enum": [ "DURATION_EXPIRED", "NETWORK_TERMINATED", "DELETE_REQUESTED" ] }, "messages": { "type": "array", "items": { "type": "object", "properties": { "severity": { "description": "Message severity", "type": "string", "enum": [ "INFO", "WARNING" ] }, "description": { "description": "Detailed message text", "type": "string" } }, "required": [ "severity", "description" ] } } }, "required": [ "sessionId", "duration", "qosStatus" ] } ] } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Schema validation failed at ..." } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Authorization failed: ..." } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Operation not allowed: ..." } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "404": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 404, "code": "NOT_FOUND", "message": "Session Id does not exist" } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "500": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 500, "code": "INTERNAL", "message": "Internal server error: ..." } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "503": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 503, "code": "UNAVAILABLE", "message": "Service unavailable" } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" } } } }, "/device-status/v0/roaming": { "post": { "tags": [ "Device Status v0.5.1" ], "summary": "Get the current roaming status and the country information", "operationId": "getRoamingStatus-DS-V0", "description": "Get the current roaming status and the country information", "responses": { "200": { "content": { "application/json": { "examples": { "No-Country-Name": { "value": { "roaming": true, "countryCode": 901, "countryName": [] } }, "Multiple-Country-Codes": { "value": { "roaming": true, "countryCode": 340, "countryName": [ "BL", "GF", "GP", "MF", "MQ" ] } }, "Single-Country-Code": { "value": { "roaming": true, "countryCode": 262, "countryName": [ "DE" ] } } }, "schema": { "type": "object", "required": [ "roaming" ], "properties": { "roaming": { "description": "Roaming status. True, if it is roaming", "type": "boolean" }, "countryCode": { "description": "The Mobile country code (MCC) as an geographic region identifier for the country and the dependent areas.", "type": "integer" }, "countryName": { "description": "The ISO 3166 ALPHA-2 country-codes of mapped to mobile country code(MCC). If there is mapping of one MCC to multiple countries, then we have list of countries. If there is no mapping of MCC to any country, then an empty array [] shall be returned..", "type": "array", "items": { "type": "string" } } } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param" } } }, "schema": { "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" } } } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials" } } }, "schema": { "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" } } } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action" } } }, "schema": { "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" } } } } }, "description": "" }, "404": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 404, "code": "NOT_FOUND", "message": "The specified resource is not found" } } }, "schema": { "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" } } } } }, "description": "" }, "500": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 500, "code": "INTERNAL", "message": "Server error" } } }, "schema": { "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" } } } } }, "description": "" }, "503": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 503, "code": "UNAVAILABLE", "message": "Service unavailable" } } }, "schema": { "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" } } } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "ROAMING_TRUE_PHONE_NUMBER": { "value": { "device": { "phoneNumber": "+99999991000" } } }, "ROAMING_FALSE_PHONE_NUMBER": { "value": { "device": { "phoneNumber": "+99999991001" } } } }, "schema": { "type": "object", "properties": { "device": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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.\n", "type": "object", "properties": { "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, optionally prefixed with '+'.", "type": "string", "pattern": "^\\+?[0-9]{5,15}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 } }, "required": [ "device" ] } } }, "description": "" }, "parameters": [ { "$ref": "#/components/parameters/x-rapidapi-host" } ] } }, "/qod/v0/sessions/{sessionId}": { "get": { "tags": [ "Quality-of-Service on Demand v0.10.1" ], "summary": "Get QoS session information", "parameters": [ { "name": "sessionId", "in": "path", "required": true, "description": "Session ID that was obtained from the createSession operation", "schema": { "description": "Session ID in UUID format", "type": "string", "format": "uuid" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "getSession", "description": "Querying for QoS session resource information details", "responses": { "200": { "content": { "application/json": { "examples": { "Example_1": { "value": { "device": { "phoneNumber": "123456789", "networkAccessIdentifier": "123456789@domain.com", "ipv4Address": { "publicAddress": "84.125.93.10", "privateAddress": "84.125.93.10", "publicPort": 0 }, "ipv6Address": "2001:db8:85a3:8d3:1319:8a2e:370:7344" }, "applicationServer": { "ipv4Address": "192.168.0.1/24", "ipv6Address": "2001:db8:85a3:8d3:1319:8a2e:370:7344" }, "devicePorts": { "ranges": [ { "from": 0, "to": 0 } ], "ports": [] }, "applicationServerPorts": { "ranges": [ { "from": 0, "to": 0 } ], "ports": [] }, "qosProfile": "QCI_1_voice", "webhook": { "notificationUrl": "https://application-server.com", "notificationAuthToken": "c8974e592c2fa383d4a3960714" }, "sessionId": "", "duration": 86400, "startedAt": 1639479600, "expiresAt": 1639566000, "qosStatus": "REQUESTED", "messages": [ { "severity": "INFO", "description": "" } ] } } }, "schema": { "description": "Session related information.", "allOf": [ { "description": "Common attributes of a QoD session", "type": "object", "properties": { "device": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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\n", "type": "object", "properties": { "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, optionally prefixed with '+'.", "type": "string", "pattern": "^\\+?[0-9]{5,15}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n\nThe session shall apply to all IP flows between the device subnet and the specified application server, unless further restricted by the optional parameters devicePorts or applicationServerPorts.\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 }, "applicationServer": { "description": "A server hosting backend applications to deliver some business logic to clients.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n", "type": "object", "properties": { "ipv4Address": { "type": "string", "description": "IPv4 address may be specified in form
as:\n - address - an IPv4 number in dotted-quad form 1.2.3.4. Only this exact IP number will match the flow control rule.\n - address/mask - an IP number as above with a mask width of the form 1.2.3.4/24.\n In this case, all IP numbers from 1.2.3.0 to 1.2.3.255 will match. The bit width MUST be valid for the IP version.\n" }, "ipv6Address": { "type": "string", "description": "IPv6 address may be specified in form
as:\n - address - The /128 subnet is optional for single addresses:\n - 2001:db8:85a3:8d3:1319:8a2e:370:7344\n - 2001:db8:85a3:8d3:1319:8a2e:370:7344/128\n - address/mask - an IP v6 number with a mask:\n - 2001:db8:85a3:8d3::0/64\n - 2001:db8:85a3:8d3::/64\n" } }, "minProperties": 1 }, "devicePorts": { "description": "The ports used locally by the device for flows to which the requested QoS profile should apply. If omitted, then the qosProfile will apply to all flows between the device and the specified application server address and ports", "allOf": [ { "type": "object", "minProperties": 1, "properties": { "ranges": { "type": "array", "minItems": 1, "items": { "type": "object", "required": [ "from", "to" ], "properties": { "from": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 }, "to": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } }, "ports": { "type": "array", "minItems": 1, "items": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } } ] }, "applicationServerPorts": { "description": "A list of single ports or port ranges on the application server", "allOf": [ { "type": "object", "minProperties": 1, "properties": { "ranges": { "type": "array", "minItems": 1, "items": { "type": "object", "required": [ "from", "to" ], "properties": { "from": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 }, "to": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } }, "ports": { "type": "array", "minItems": 1, "items": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } } ] }, "qosProfile": { "description": "A unique name for identifying a specific QoS profile.\nThis may follow different formats depending on the service providers implementation.\nSome options addresses:\n\n\n\n\n\n - A UUID style string\n - Support for predefined profiles QOS_S, QOS_M, QOS_L, and QOS_E\n - A searchable descriptive name\n", "type": "string", "minLength": 3, "maxLength": 256, "format": "string", "pattern": "^[a-zA-Z0-9_.-]+$" }, "webhook": { "type": "object", "required": [ "notificationUrl" ], "properties": { "notificationUrl": { "type": "string", "format": "uri", "description": "Allows asynchronous delivery of session related events" }, "notificationAuthToken": { "type": "string", "minLength": 20, "maxLength": 256, "description": "Authentication token for callback API" } } } }, "required": [ "device", "applicationServer", "qosProfile" ] }, { "type": "object", "properties": { "sessionId": { "description": "Session ID in UUID format", "type": "string", "format": "uuid" }, "duration": { "type": "integer", "format": "int32", "minimum": 1, "maximum": 2147483647 }, "startedAt": { "type": "integer", "description": "Timestamp of session start in seconds since Unix epoch", "format": "int64", "minimum": -9223372036854776000, "maximum": 9223372036854776000 }, "expiresAt": { "type": "integer", "description": "Timestamp of session expiration if the session was not deleted, in seconds since Unix epoch", "format": "int64", "minimum": -9223372036854776000, "maximum": 9223372036854776000 }, "qosStatus": { "description": "The current status of the requested QoS session. The status can be one of the following:\n* `REQUESTED` - QoS has been requested by creating a session\n* `AVAILABLE` - The requested QoS has been provided by the network\n* `UNAVAILABLE` - The requested QoS cannot be provided by the network due to some reason\n", "type": "string", "enum": [ "REQUESTED", "AVAILABLE", "UNAVAILABLE" ] }, "messages": { "type": "array", "items": { "type": "object", "properties": { "severity": { "description": "Message severity", "type": "string", "enum": [ "INFO", "WARNING" ] }, "description": { "description": "Detailed message text", "type": "string" } }, "required": [ "severity", "description" ] } } }, "required": [ "sessionId", "duration", "startedAt", "expiresAt", "qosStatus" ] } ] } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Schema validation failed at ..." } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Authorization failed: ..." } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Operation not allowed: ..." } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "404": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 404, "code": "NOT_FOUND", "message": "Session Id does not exist" } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "500": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 500, "code": "INTERNAL", "message": "Internal server error: ..." } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "503": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 503, "code": "UNAVAILABLE", "message": "Service unavailable" } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" } } }, "delete": { "tags": [ "Quality-of-Service on Demand v0.10.1" ], "summary": "Delete a QoS session", "parameters": [ { "name": "sessionId", "in": "path", "required": true, "description": "Session ID that was obtained from the createSession operation", "schema": { "description": "Session ID in UUID format", "type": "string", "format": "uuid" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "deleteSession", "description": "Release resources related to QoS session\n\nIf the notification callback is provided and the `qosStatus` of the session was `AVAILABLE` the client will receive in addition to the response a `QOS_STATUS_CHANGED` event with\n- `qosStatus` as `UNAVAILABLE` and\n- `statusInfo` as `DELETE_REQUESTED`\nThere will be no notification event if the `qosStatus` was already `UNAVAILABLE`.\n", "responses": { "204": { "content": { "application/json": { "examples": { "Example_1": { "value": {} } }, "schema": {} } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Schema validation failed at ..." } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Authorization failed: ..." } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Operation not allowed: ..." } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "404": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 404, "code": "NOT_FOUND", "message": "Session Id does not exist" } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "500": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 500, "code": "INTERNAL", "message": "Internal server error: ..." } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "503": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 503, "code": "UNAVAILABLE", "message": "Service unavailable" } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" } } } }, "/passthrough/camara/v1/kyc-age-verification/kyc-age-verification/v0.1/verify": { "post": { "tags": [ "KYC Age Verification v0.1" ], "summary": "Verify Age Threshold", "parameters": [ { "name": "authorization", "in": "header", "required": false, "description": "authorization header for token", "schema": { "type": "string" } }, { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": { "type": "string", "pattern": "^[a-zA-Z0-9-]{0,55}$", "default": "b4333c46-49c0-4f62-80d7-f0ef930f1c46" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "verifyAge", "description": "Verify that the age of the subscriber associated with a phone number is equal to or greater than the specified age threshold value.\n\nAs it is possible that the person holding the contract and the end-user of the subscription may not be the same, the endpoint also admits a list of optional properties to be included in the request to improve the identification. The response may optionally include the `identityMatchScore` property with a value that indicates how certain it is that the information returned relates to the person that the API Client is requesting. To increase the reliability of the information returned, the API Provider may include in the response the `verifiedStatus` property, indicating whether the identity information in its possession has been verified against an identification document legally accepted as an age verification document.\n\nIf the API Client indicates request properties `includeContentLock` or `includeParentalControl` with value `true` and the API Provider implements this functionality, then the response will also include `contentLock` and `parentalControl` properties to indicate if the subscription has any kind of content filtering enabled. On the other hand, if the request properties are not included or the API Client specifies value `false`, then the response properties will not be returned. If the API Provider doesn't implement this functionality, request properties will be ignored and response properties won't be returned in any case.\n", "responses": { "200": { "content": { "application/json": { "examples": { "KYC_200Example": { "value": { "ageCheck": "true", "verifiedStatus": true, "identityMatchScore": 90, "contentLock": "false", "parentalControl": "true" } } }, "schema": { "type": "object", "description": "Response to an age verification request", "required": [ "ageCheck" ], "properties": { "ageCheck": { "type": "string", "description": "Indicate `\"true\"` when the age of the user is the same age or older than the age threshold (age >= age threshold), and `\"false\"` if not (age < age threshold). If the API Provider doesn't have enough information to perform the validation, a `not_available` can be returned.", "enum": [ "true", "false", "not_available" ] }, "verifiedStatus": { "type": "boolean", "description": "Indicate `true` if the information provided has been compared against information based on an identification document legally accepted as an age verification document, otherwise indicate `false`." }, "identityMatchScore": { "type": "integer", "minimum": 0, "maximum": 100, "description": "The overall score of identity information available in the API Provider, information either provided in the request body comparing it to the one that the API Provider holds or directly using internal API Provider's information. It is optional for the API Provider to return the Identity match score." }, "contentLock": { "type": "string", "description": "Indicate `\"true\"` if the subscription associated with the phone number has any kind of content lock (i.e certain web content blocked) and `\"false\"` if not. If the information is not available the value `not_available` can be returned.", "enum": [ "true", "false", "not_available" ] }, "parentalControl": { "type": "string", "description": "Indicate `\"true\"` if the subscription associated with the phone number has any kind of parental control activated and `\"false\"` if not. If the information is not available the value `not_available` can be returned.", "enum": [ "true", "false", "not_available" ] } } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "GENERIC_400_INVALID_ARGUMENT": { "description": "Invalid Argument. Generic Syntax Exception", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param." } }, "GENERIC_400_OUT_OF_RANGE": { "description": "Out of Range. Specific Syntax Exception used when a given field has a pre-defined range or a invalid filter criteria combination is requested", "value": { "status": 400, "code": "OUT_OF_RANGE", "message": "Client specified an invalid range." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 400 ] }, "code": { "enum": [ "INVALID_ARGUMENT", "OUT_OF_RANGE" ] } } } ] } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "GENERIC_401_UNAUTHENTICATED": { "description": "Request cannot be authenticated", "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials." } }, "GENERIC_401_AUTHENTICATION_REQUIRED": { "description": "New authentication is needed, authentication is no longer valid", "value": { "status": 401, "code": "AUTHENTICATION_REQUIRED", "message": "New authentication is required." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 401 ] }, "code": { "enum": [ "UNAUTHENTICATED", "AUTHENTICATION_REQUIRED" ] } } } ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "GENERIC_403_PERMISSION_DENIED": { "description": "Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security", "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 403 ] }, "code": { "enum": [ "PERMISSION_DENIED" ] } } } ] } } }, "description": "" }, "404": { "content": { "application/json": { "examples": { "GENERIC_404_IDENTIFIER_NOT_FOUND": { "description": "The phone number is not associated with a CSP customer account", "value": { "status": 404, "code": "IDENTIFIER_NOT_FOUND", "message": "The phone number provided is not associated with a customer account" } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 404 ] }, "code": { "enum": [ "IDENTIFIER_NOT_FOUND" ] } } } ] } } }, "description": "" }, "422": { "content": { "application/json": { "examples": { "GENERIC_422_UNNECESSARY_IDENTIFIER": { "description": "An explicit phone number has been provided when one is already associated with the access token", "value": { "status": 422, "code": "UNNECESSARY_IDENTIFIER", "message": "An explicit phone number has been provided when one is already associated with the access token" } }, "GENERIC_422_MISSING_IDENTIFIER": { "description": "No phone number has been provided either explicitly or associated with the access token", "value": { "status": 422, "code": "MISSING_IDENTIFIER", "message": "No phone number has been provided" } }, "GENERIC_422_SERVICE_NOT_APPLICABLE": { "description": "Service is not applicable for the provided phone number", "value": { "status": 422, "code": "SERVICE_NOT_APPLICABLE", "message": "The service is not applicable for the provided phone number" } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 422 ] }, "code": { "enum": [ "SERVICE_NOT_APPLICABLE", "MISSING_IDENTIFIER", "UNNECESSARY_IDENTIFIER" ] } } } ] } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "KYC_AGE_VERIFICATION": { "value": { "ageThreshold": 18, "phoneNumber": "+99999991000", "idDocument": "66666666q", "name": "Federica Sanchez Arjona", "givenName": "Federica", "familyName": "Sanchez Arjona", "middleNames": "Sanchez", "familyNameAtBirth": "YYYY", "birthdate": "1978-08-22", "email": "federicaSanchez.Arjona@example.com", "includeContentLock": true, "includeParentalControl": true } }, "KYC_AGE_VERIFICATION_3_LEGGED_FLOW": { "value": { "ageThreshold": 18, "idDocument": "66666666q", "name": "Federica Sanchez Arjona", "givenName": "Federica", "familyName": "Sanchez Arjona", "middleNames": "Sanchez", "familyNameAtBirth": "YYYY", "birthdate": "1978-08-22", "email": "federicaSanchez.Arjona@gmail.com", "includeContentLock": true, "includeParentalControl": true } } }, "schema": { "type": "object", "description": "Request to verify the age threshold provided.", "required": [ "ageThreshold" ], "properties": { "ageThreshold": { "type": "integer", "minimum": 0, "maximum": 120, "description": "The age to be verified. The indicated range is a global definition of maximum and minimum values allowed to be requested. It is important to note that this range might be more restrictive in some implementations due to local regulations of a country i.e. A country does not allow to request for an age under 18. This limitation must be informed during the onboarding process." }, "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}$" }, "idDocument": { "type": "string", "description": "Id number associated to the official identity document in the country. It may contain alphanumeric characters." }, "name": { "type": "string", "description": "Complete name of the customer, usually composed of first/given name and last/family/sur- name in a country. Depending on the country, the order of first/give name and last/family/sur- name varies, and middle name could be included. It can use givenName, middleNames, familyName and/or familyNameAtBirth. For example, in ESP, name+familyName; in NLD, it can be name+middleNames+familyName or name+middleNames+familyNameAtBirth, etc." }, "givenName": { "type": "string", "description": "First/given name or compound first/given name of the customer." }, "familyName": { "type": "string", "description": "Last name, family name, or surname of the customer." }, "middleNames": { "type": "string", "description": "Middle name/s of the customer." }, "familyNameAtBirth": { "type": "string", "description": "Last/family/sur- name at birth of the customer." }, "birthdate": { "type": "string", "format": "date", "description": "The birthdate of the customer, in RFC 3339 / ISO 8601 calendar date format (YYYY-MM-DD)." }, "email": { "type": "string", "format": "email", "description": "Email address of the customer in the RFC specified format (local-part@domain)." }, "includeContentLock": { "type": "boolean", "default": false, "description": "If this parameter is included in the request with value `true`, the response property `contentLock` will be returned. If it is not included or its value is `false`, the response property will not be returned." }, "includeParentalControl": { "type": "boolean", "default": false, "description": "If this parameter is included in the request with value `true`, the response property `parentalControl` will be returned. If it is not included or its value is `false`, the response property will not be returned." } } } } }, "description": "" } } }, "/device-status/device-reachability-status-subscriptions/v0.8/subscriptions/{subscriptionId}": { "get": { "tags": [ "Device Reachability Status Subscriptions v0.8" ], "summary": "Retrieve a device reachability status event subscription for a device", "parameters": [ { "name": "subscriptionId", "in": "path", "required": true, "description": "Subscription identifier that was obtained from the create event subscription operation", "schema": { "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.", "default": "qs15-h556-rt89-1298" } }, { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": {} }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "retrieveDeviceReachabilityStatusSubscription-DS-RES-V080", "description": "Retrieve a given subscription by ID", "responses": { "200": { "content": { "application/json": { "examples": { "Subscription Activation Requested": { "value": { "id": "550e8400-e29b-41d4-a716-446655440000", "sink": "https://endpoint.example.com/sink", "protocol": "HTTP", "types": [ "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-data" ], "config": { "subscriptionDetail": {}, "subscriptionExpireTime": "2024-07-17T13:18:23.682Z", "subscriptionMaxEvents": 5, "initialEvent": true }, "startsAt": "2024-07-03T21:12:02.871Z", "expiresAt": "2024-07-03T21:12:02.871Z", "status": "ACTIVATION_REQUESTED" } }, "Active Subscription With Device Disambiguation": { "value": { "id": "550e8400-e29b-41d4-a716-446655440000", "sink": "https://endpoint.example.com/sink", "protocol": "HTTP", "types": [ "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-data" ], "config": { "subscriptionDetail": { "device": { "phoneNumber": "+99999991000" } }, "subscriptionExpireTime": "2024-07-17T13:18:23.682Z", "subscriptionMaxEvents": 5, "initialEvent": true }, "startsAt": "2024-07-03T21:12:02.871Z", "expiresAt": "2024-07-03T21:12:02.871Z", "status": "ACTIVE" } }, "Active Subscription": { "value": { "id": "550e8400-e29b-41d4-a716-446655440000", "sink": "https://endpoint.example.com/sink", "protocol": "HTTP", "types": [ "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-data" ], "config": { "subscriptionDetail": {}, "subscriptionExpireTime": "2024-07-17T13:18:23.682Z", "subscriptionMaxEvents": 5, "initialEvent": true }, "startsAt": "2024-07-03T21:12:02.871Z", "expiresAt": "2024-07-03T21:12:02.871Z", "status": "ACTIVE" } }, "Subscription Deleted": { "value": { "id": "550e8400-e29b-41d4-a716-446655440000", "sink": "https://endpoint.example.com/sink", "protocol": "HTTP", "types": [ "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-data" ], "config": { "subscriptionDetail": {}, "subscriptionExpireTime": "2024-07-17T13:18:23.682Z", "subscriptionMaxEvents": 5, "initialEvent": true }, "startsAt": "2024-07-03T21:12:02.871Z", "expiresAt": "2024-07-03T21:12:02.871Z", "status": "DELETED" } } }, "schema": { "description": "Represents a event-type subscription.", "type": "object", "required": [ "sink", "protocol", "config", "types", "id" ], "properties": { "protocol": { "type": "string", "enum": [ "HTTP", "MQTT3", "MQTT5", "AMQP", "NATS", "KAFKA" ], "description": "Identifier of a delivery protocol. Only HTTP is allowed for now" }, "sink": { "type": "string", "format": "uri", "pattern": "^https:\\/\\/.+$", "description": "The address to which events shall be delivered using the selected protocol." }, "types": { "description": "Camara Event types eligible to be delivered by this subscription.\nNote: For the current Commonalities API design guidelines, only one event type per subscription is allowed\n", "type": "array", "minItems": 1, "maxItems": 1, "items": { "type": "string", "description": "reachability-data - Event triggered when the device is connected to the network for Data usage (regardless of the SMS reachability).\n\nreachability-sms - Event triggered when the device is connected to the network only for SMS usage\n\nreachability-disconnected - Event triggered when the device is not connected.\n", "enum": [ "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-data", "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-sms", "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-disconnected" ] } }, "config": { "description": "Implementation-specific configuration parameters needed by the subscription manager for acquiring events.\nIn CAMARA we have predefined attributes like `subscriptionExpireTime`, `subscriptionMaxEvents`, `initialEvent`\nSpecific event type attributes must be defined in `subscriptionDetail`\nNote: if a request is performed for several event type, all subscribed event will use same `config` parameters.\n", "type": "object", "required": [ "subscriptionDetail" ], "properties": { "subscriptionDetail": { "description": "The detail of the requested event subscription.", "type": "object", "properties": { "device": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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.\n", "type": "object", "properties": { "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}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 } } }, "subscriptionExpireTime": { "type": "string", "format": "date-time", "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 }, "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.\nExample: Consumer subscribes to reachability SMS. If consumer sets initialEvent to true and device is already reachable by SMS, an event is triggered.\n" } } }, "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." }, "startsAt": { "type": "string", "format": "date-time", "description": "Date when the event subscription will begin/began\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\nRecommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)\n" }, "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.\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\nRecommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)\n" }, "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\n\n\n\n\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" ] } } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "GENERIC_400_INVALID_ARGUMENT": { "description": "Invalid Argument. Generic Syntax Exception", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param." } }, "GENERIC_400_SUBSCRIPTION_ID_REQUIRED": { "description": "subscription id is required", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Expected property is missing: subscriptionId" } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 400 ] }, "code": { "enum": [ "INVALID_ARGUMENT" ] } } } ] } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "GENERIC_401_UNAUTHENTICATED": { "description": "Request cannot be authenticated and a new authentication is required", "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials. A new authentication is required." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 401 ] }, "code": { "enum": [ "UNAUTHENTICATED" ] } } } ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "GENERIC_403_PERMISSION_DENIED": { "description": "Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security", "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 403 ] }, "code": { "enum": [ "PERMISSION_DENIED" ] } } } ] } } }, "description": "" }, "404": { "content": { "application/json": { "examples": { "GENERIC_404_NOT_FOUND": { "description": "Resource is not found", "value": { "status": 404, "code": "NOT_FOUND", "message": "The specified resource is not found." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 404 ] }, "code": { "enum": [ "NOT_FOUND" ] } } } ] } } }, "description": "" } } }, "delete": { "tags": [ "Device Reachability Status Subscriptions v0.8" ], "summary": "Delete a device reachability status event subscription for a device", "parameters": [ { "name": "subscriptionId", "in": "path", "required": true, "description": "Subscription identifier that was obtained from the create event subscription operation", "schema": { "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.", "default": "qs15-h556-rt89-1298" } }, { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": {} }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "deleteDeviceReachabilityStatusSubscription-DS-RES-V080", "description": "Delete a given subscription by ID", "responses": { "202": { "content": { "application/json": { "examples": { "Example_1": { "value": { "id": "qs15-h556-rt89-1298" } } }, "schema": { "description": "Response for a device reachability status operation managed asynchronously (Creation or Deletion)", "type": "object", "required": [ "id" ], "properties": { "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." } } } } }, "description": "" }, "204": { "content": { "application/json": { "examples": { "Example_1": { "value": {} } }, "schema": {} } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "GENERIC_400_INVALID_ARGUMENT": { "description": "Invalid Argument. Generic Syntax Exception", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param." } }, "GENERIC_400_SUBSCRIPTION_ID_REQUIRED": { "description": "subscription id is required", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Expected property is missing: subscriptionId" } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 400 ] }, "code": { "enum": [ "INVALID_ARGUMENT" ] } } } ] } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "GENERIC_401_UNAUTHENTICATED": { "description": "Request cannot be authenticated and a new authentication is required", "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials. A new authentication is required." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 401 ] }, "code": { "enum": [ "UNAUTHENTICATED" ] } } } ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "GENERIC_403_PERMISSION_DENIED": { "description": "Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security", "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 403 ] }, "code": { "enum": [ "PERMISSION_DENIED" ] } } } ] } } }, "description": "" }, "404": { "content": { "application/json": { "examples": { "GENERIC_404_NOT_FOUND": { "description": "Resource is not found", "value": { "status": 404, "code": "NOT_FOUND", "message": "The specified resource is not found." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 404 ] }, "code": { "enum": [ "NOT_FOUND" ] } } } ] } } }, "description": "" } } } }, "/congestion-insights/v0/subscriptions": { "post": { "tags": [ "Congestion Insights v1.0.0" ], "summary": "Create device congestion subscription", "operationId": "createSubscription-ConI-V1", "description": "Create device congestion subscription. Notifies if congestion is high, medium, low or none.", "responses": { "201": { "content": { "application/json": { "examples": { "Example_1": { "value": { "device": { "phoneNumber": "", "networkAccessIdentifier": "", "ipv4Address": { "publicAddress": "", "privateAddress": "", "publicPort": 0 }, "ipv6Address": "" }, "webhook": { "notificationUrl": "https://application-server.com", "notificationAuthToken": "c8974e592c2fa383d4a3960714" }, "subscriptionExpireTime": "", "subscriptionId": "", "startedAt": "", "expiresAt": "" } } }, "schema": { "properties": { "device": { "properties": { "phoneNumber": { "type": "string", "maxLength": 16, "pattern": "^\\+[1-9][0-9]{4,14}$", "title": "Phonenumber", "description": "Phone number of the subscription, if any. Optional.", "nullable": true }, "networkAccessIdentifier": { "type": "string", "maxLength": 256, "pattern": "^\\S+@\\S+\\.\\S+$", "title": "Networkaccessidentifier", "description": "Email address-like external identifier of the subscription registered at the operator. If both networkAccessIdentifier and phoneNumber are included, phoneNumber may be dropped and networkAccessIdentifier may be retained.", "nullable": true }, "ipv4Address": { "allOf": [ { "properties": { "publicAddress": { "type": "string", "maxLength": 15, "title": "Publicaddress", "description": "Public IPv4 address of the device. Either of the device or the NAT the device is behind.", "nullable": true }, "privateAddress": { "type": "string", "maxLength": 15, "title": "Privateaddress", "description": "Private IPv4 address of the device, if it is behind a NAT.", "nullable": true }, "publicPort": { "type": "integer", "maximum": 65535, "minimum": 0, "format": "int32", "title": "Publicport", "description": "Public port used by the device. Port is necessary, as private address ranges overlap, and public port is used to extend the range for CGNAT.", "nullable": true } }, "type": "object", "title": "DeviceIpv4Addr" } ], "description": "IPv4 address of the device. IP address is needed for some flow-oriented services, such as QoD." }, "ipv6Address": { "type": "string", "maxLength": 45, "title": "Ipv6Address", "description": "IPv6 address of the device. IP address is needed for some flow-oriented services, such as QoD.", "nullable": true } }, "type": "object", "title": "Device" }, "webhook": { "properties": { "notificationUrl": { "type": "string", "maxLength": 256, "title": "Notificationurl", "description": "Notification URL for session-related events." }, "notificationAuthToken": { "type": "string", "maxLength": 4096, "title": "Notificationauthtoken", "description": "Authorization token for notification sending.", "nullable": true } }, "type": "object", "required": [ "notificationUrl" ], "title": "Webhook" }, "subscriptionExpireTime": { "type": "string", "format": "date-time", "title": "Subscriptionexpiretime", "description": "Time when the subscription expires." }, "subscriptionId": { "type": "string", "title": "Subscriptionid" }, "startedAt": { "type": "string", "format": "date-time", "title": "Startedat", "description": "Time when subscription started", "nullable": true }, "expiresAt": { "type": "string", "format": "date-time", "title": "Expiresat", "description": "Time when subscription will expire or expired", "nullable": true } }, "type": "object", "required": [ "device", "webhook", "subscriptionExpireTime", "subscriptionId" ], "title": "SubscriptionInfo" } } }, "description": "" }, "422": { "content": { "application/json": { "examples": { "Example_1": { "value": { "detail": [ { "loc": [], "msg": "", "type": "" } ] } } }, "schema": { "properties": { "detail": { "items": { "properties": { "loc": { "type": "array", "items": { "type": "string" }, "title": "Location" }, "msg": { "type": "string", "title": "Message" }, "type": { "type": "string", "title": "Error Type" } }, "type": "object", "required": [ "loc", "msg", "type" ], "title": "ValidationError" }, "type": "array", "title": "Detail" } }, "type": "object", "title": "HTTPValidationError" } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "CREATE_DEVICE_CONGESTION_SUBSCRIPTION": { "value": { "device": { "phoneNumber": "+36719991000" }, "webhook": { "notificationUrl": "http://example.com/notify", "notificationAuthToken": "c8974e592f9fh683d4a3960714" }, "subscriptionExpireTime": "2045-04-12T14:09:33+05:00" } } }, "schema": { "properties": { "device": { "properties": { "phoneNumber": { "type": "string", "maxLength": 16, "pattern": "^\\+[1-9][0-9]{4,14}$", "title": "Phonenumber", "description": "Phone number of the subscription, if any. Optional.", "nullable": true }, "networkAccessIdentifier": { "type": "string", "maxLength": 256, "pattern": "^\\S+@\\S+\\.\\S+$", "title": "Networkaccessidentifier", "description": "Email address-like external identifier of the subscription registered at the operator. If both networkAccessIdentifier and phoneNumber are included, phoneNumber may be dropped and networkAccessIdentifier may be retained.", "nullable": true }, "ipv4Address": { "allOf": [ { "properties": { "publicAddress": { "type": "string", "maxLength": 15, "title": "Publicaddress", "description": "Public IPv4 address of the device. Either of the device or the NAT the device is behind.", "nullable": true }, "privateAddress": { "type": "string", "maxLength": 15, "title": "Privateaddress", "description": "Private IPv4 address of the device, if it is behind a NAT.", "nullable": true }, "publicPort": { "type": "integer", "maximum": 65535, "minimum": 0, "format": "int32", "title": "Publicport", "description": "Public port used by the device. Port is necessary, as private address ranges overlap, and public port is used to extend the range for CGNAT.", "nullable": true } }, "type": "object", "title": "DeviceIpv4Addr" } ], "description": "IPv4 address of the device. IP address is needed for some flow-oriented services, such as QoD." }, "ipv6Address": { "type": "string", "maxLength": 45, "title": "Ipv6Address", "description": "IPv6 address of the device. IP address is needed for some flow-oriented services, such as QoD.", "nullable": true } }, "type": "object", "title": "Device" }, "webhook": { "properties": { "notificationUrl": { "type": "string", "maxLength": 256, "title": "Notificationurl", "description": "Notification URL for session-related events." }, "notificationAuthToken": { "type": "string", "maxLength": 4096, "title": "Notificationauthtoken", "description": "Authorization token for notification sending.", "nullable": true } }, "type": "object", "required": [ "notificationUrl" ], "title": "Webhook" }, "subscriptionExpireTime": { "type": "string", "format": "date-time", "title": "Subscriptionexpiretime", "description": "Time when the subscription expires." } }, "type": "object", "required": [ "device", "webhook", "subscriptionExpireTime" ], "title": "SubscribeCongestionCreate" } } }, "description": "" }, "parameters": [ { "$ref": "#/components/parameters/x-rapidapi-host" } ] }, "get": { "tags": [ "Congestion Insights v1.0.0" ], "summary": "Get congestion subscriptions", "operationId": "getSubscriptions", "description": "Get congestion subscriptions.", "responses": { "200": { "content": { "application/json": { "examples": { "Example_1": { "value": [ { "device": { "phoneNumber": "", "networkAccessIdentifier": "", "ipv4Address": { "publicAddress": "", "privateAddress": "", "publicPort": 0 }, "ipv6Address": "" }, "webhook": { "notificationUrl": "https://application-server.com", "notificationAuthToken": "c8974e592c2fa383d4a3960714" }, "subscriptionExpireTime": "", "subscriptionId": "", "startedAt": "", "expiresAt": "" } ] } }, "schema": { "items": { "properties": { "device": { "properties": { "phoneNumber": { "type": "string", "maxLength": 16, "pattern": "^\\+[1-9][0-9]{4,14}$", "title": "Phonenumber", "description": "Phone number of the subscription, if any. Optional.", "nullable": true }, "networkAccessIdentifier": { "type": "string", "maxLength": 256, "pattern": "^\\S+@\\S+\\.\\S+$", "title": "Networkaccessidentifier", "description": "Email address-like external identifier of the subscription registered at the operator. If both networkAccessIdentifier and phoneNumber are included, phoneNumber may be dropped and networkAccessIdentifier may be retained.", "nullable": true }, "ipv4Address": { "allOf": [ { "properties": { "publicAddress": { "type": "string", "maxLength": 15, "title": "Publicaddress", "description": "Public IPv4 address of the device. Either of the device or the NAT the device is behind.", "nullable": true }, "privateAddress": { "type": "string", "maxLength": 15, "title": "Privateaddress", "description": "Private IPv4 address of the device, if it is behind a NAT.", "nullable": true }, "publicPort": { "type": "integer", "maximum": 65535, "minimum": 0, "format": "int32", "title": "Publicport", "description": "Public port used by the device. Port is necessary, as private address ranges overlap, and public port is used to extend the range for CGNAT.", "nullable": true } }, "type": "object", "title": "DeviceIpv4Addr" } ], "description": "IPv4 address of the device. IP address is needed for some flow-oriented services, such as QoD." }, "ipv6Address": { "type": "string", "maxLength": 45, "title": "Ipv6Address", "description": "IPv6 address of the device. IP address is needed for some flow-oriented services, such as QoD.", "nullable": true } }, "type": "object", "title": "Device" }, "webhook": { "properties": { "notificationUrl": { "type": "string", "maxLength": 256, "title": "Notificationurl", "description": "Notification URL for session-related events." }, "notificationAuthToken": { "type": "string", "maxLength": 4096, "title": "Notificationauthtoken", "description": "Authorization token for notification sending.", "nullable": true } }, "type": "object", "required": [ "notificationUrl" ], "title": "Webhook" }, "subscriptionExpireTime": { "type": "string", "format": "date-time", "title": "Subscriptionexpiretime", "description": "Time when the subscription expires." }, "subscriptionId": { "type": "string", "title": "Subscriptionid" }, "startedAt": { "type": "string", "format": "date-time", "title": "Startedat", "description": "Time when subscription started", "nullable": true }, "expiresAt": { "type": "string", "format": "date-time", "title": "Expiresat", "description": "Time when subscription will expire or expired", "nullable": true } }, "type": "object", "required": [ "device", "webhook", "subscriptionExpireTime", "subscriptionId" ], "title": "SubscriptionInfo" }, "type": "array", "title": "Response Getsubscriptions" } } }, "description": "" } }, "parameters": [ { "$ref": "#/components/parameters/x-rapidapi-host" } ] } }, "/location-verification/v1/verify": { "post": { "tags": [ "Location Verification v1.0.0" ], "summary": "Verify the location of a device", "parameters": [ { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": { "type": "string" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "verifyLocation", "description": "Verify whether the location of a device is within a requested area. The operation returns a verification result and, optionally, a match rate estimation for the location verification in percent.\n", "responses": { "200": { "content": { "application/json": { "examples": { "VERIFICATION_FALSE": { "description": "The requested area does not match the area where the network locates the device", "value": { "verificationResult": "FALSE", "lastLocationTime": "2023-09-07T10:40:52.000Z" } }, "VERIFICATION_UNKNOWN": { "description": "The network cannot locate the device", "value": { "verificationResult": "UNKNOWN" } }, "VERIFICATION_PARTIAL": { "description": "The requested area partially matches the area where the network locates the device", "value": { "verificationResult": "PARTIAL", "matchRate": 74, "lastLocationTime": "2023-09-07T10:40:52.000Z" } }, "VERIFICATION_TRUE": { "description": "The network locates the device within the requested area", "value": { "verificationResult": "TRUE", "lastLocationTime": "2023-09-07T10:40:52.000Z" } } }, "schema": { "description": "Response to a location verification request", "type": "object", "required": [ "verificationResult" ], "properties": { "lastLocationTime": { "description": "Timestamp of the last location information. It must follow RFC 3339 and must have time zone. Recommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)", "format": "date-time", "type": "string" }, "verificationResult": { "description": "Result of a verification request:\n - `TRUE`: when the network locates the device within the requested area,\n - `FALSE`: when the requested area does not match the area where the network locates the device,\n - `UNKNOWN`: when the network cannot locate the device,\n - `PARTIAL`: when the requested area partially match the area where the network locates the device. A `match_rate` is included in the response.\n", "type": "string", "enum": [ "TRUE", "FALSE", "UNKNOWN", "PARTIAL" ] }, "matchRate": { "description": "Estimation of the match rate between the area in the request (R), and area where the network locates the device (N), calculated as the percent value of the intersection of both areas divided by the network area, that is (R ∩ N) / N * 100. Included only if VerificationResult is PARTIAL.", "type": "integer", "minimum": 1, "maximum": 99 } } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "GENERIC_400_INVALID_ARGUMENT": { "description": "Invalid Argument. Generic Syntax Exception", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param." } }, "GENERIC_400_OUT_OF_RANGE": { "description": "Out of Range. Specific Syntax Exception used when a given field has a pre-defined range or a invalid filter criteria combination is requested", "value": { "status": 400, "code": "OUT_OF_RANGE", "message": "Client specified an invalid range." } } }, "schema": { "description": "Common schema for errors", "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } } } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "GENERIC_401_AUTHENTICATION_REQUIRED": { "description": "New authentication is needed, authentication is no longer valid", "value": { "status": 401, "code": "AUTHENTICATION_REQUIRED", "message": "New authentication is required." } }, "GENERIC_401_UNAUTHENTICATED": { "description": "Request cannot be authenticated", "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials." } } }, "schema": { "description": "Common schema for errors", "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } } } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "GENERIC_403_PERMISSION_DENIED": { "description": "Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security", "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action." } }, "GENERIC_403_INVALID_TOKEN_CONTEXT": { "description": "Reflects some inconsistency between information in some field of the API and the related OAuth2 Token", "value": { "status": 403, "code": "INVALID_TOKEN_CONTEXT", "message": "{{field}} is not consistent with access token." } } }, "schema": { "description": "Common schema for errors", "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } } } } }, "description": "" }, "404": { "content": { "application/json": { "examples": { "GENERIC_404_DEVICE_NOT_FOUND": { "description": "One or more of the provided device identifiers do not match any device", "value": { "status": 404, "code": "DEVICE_NOT_FOUND", "message": "No device found for a provided identifier" } }, "GENERIC_404_NOT_FOUND": { "description": "Resource is not found", "value": { "status": 404, "code": "NOT_FOUND", "message": "{{resource}} is not found" } } }, "schema": { "description": "Common schema for errors", "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } } } } }, "description": "" }, "422": { "content": { "application/json": { "examples": { "GENERIC_422_UNSUPPORTED_DEVICE_IDENTIFIERS": { "description": "Message may list the supported device identifiers", "value": { "status": 422, "code": "UNSUPPORTED_DEVICE_IDENTIFIERS", "message": "Supported device supported are: ..." } }, "GENERIC_422_DEVICE_NOT_APPLICABLE": { "description": "The provided device is not compatible with the requested operation, according to the service provider rules.", "value": { "status": 422, "code": "DEVICE_NOT_APPLICABLE", "message": "The device is not applicable for the requested operation" } }, "GENERIC_422_UNIDENTIFIABLE_DEVICE": { "description": "No device identifier provided for the device to be located", "value": { "status": 422, "code": "UNIDENTIFIABLE_DEVICE", "message": "A device must be provided" } }, "GENERIC_422_DEVICE_IDENTIFIERS_MISMATCH": { "description": "Several device identifiers are provided but do not match the same device", "value": { "status": 422, "code": "DEVICE_IDENTIFIERS_MISMATCH", "message": "The provided device identifiers do not match the same device" } }, "GENERIC_422_UNPROCESSABLE_ENTITY": { "description": "The request was well-formed but was unable to be processed due to semantic errors or not applicable values. This is the generic error code for 422 responses.", "value": { "status": 422, "code": "UNPROCESSABLE_ENTITY", "message": "Value not acceptable: ..." } }, "LOCATION_VERIFICATION_422_UNABLE_TO_FULFILL_MAX_AGE": { "description": "The system is not able to provide the fresh location required by the client", "value": { "status": 422, "code": "LOCATION_VERIFICATION.UNABLE_TO_FULFILL_MAX_AGE", "message": "Unable to provide expected freshness for location" } } }, "schema": { "description": "Common schema for errors", "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } } } } }, "description": "" }, "429": { "content": { "application/json": { "examples": { "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." } }, "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." } } }, "schema": { "description": "Common schema for errors", "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } } } } }, "description": "" }, "500": { "content": { "application/json": { "examples": { "GENERIC_500_INTERNAL": { "description": "Problem in Server side. Regular Server Exception", "value": { "status": 500, "code": "INTERNAL", "message": "Internal server error" } } }, "schema": { "description": "Common schema for errors", "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } } } } }, "description": "" }, "503": { "content": { "application/json": { "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" } } }, "schema": { "description": "Common schema for errors", "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } } } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "DEVICE_INSIDE_AREA_FALSE_PHONE_NUMBER": { "value": { "device": { "phoneNumber": "+99999991000" }, "area": { "areaType": "CIRCLE", "center": { "latitude": 50.735851, "longitude": 7.10066 }, "radius": 50000 } } }, "DEVICE_INSIDE_AREA_TRUE_PHONE_NUMBER": { "value": { "device": { "phoneNumber": "+99999991001" }, "area": { "areaType": "CIRCLE", "center": { "latitude": 50.735851, "longitude": 7.10066 }, "radius": 50000 } } } }, "schema": { "description": "Request to verify the location of a device. Device is not required when using a 3-legged access token, following the rules in the description.", "type": "object", "properties": { "device": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE1: 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\nNOTE2: 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.\n", "type": "object", "properties": { "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}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 }, "area": { "description": "Base schema for all areas", "type": "object", "properties": { "areaType": { "type": "string", "description": "Type of this area.\nCIRCLE - The area is defined as a circle.\n", "enum": [ "CIRCLE" ] } }, "required": [ "areaType" ] }, "maxAge": { "description": "The maximum age (in seconds) for the location known by the implementation, which is accepted for the verification. Absence of maxAge means \"any age\" and maxAge=0 means a fresh calculation.", "type": "integer" } }, "required": [ "area" ] } } }, "description": "" } } }, "/device-status/device-reachability-status-subscriptions/v0.8/subscriptions": { "get": { "tags": [ "Device Reachability Status Subscriptions v0.8" ], "summary": "Retrieve a list of device reachability status event subscription", "parameters": [ { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": {} }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "retrieveDeviceReachabilityStatusSubscriptionList-DS-RES-V080", "description": "Retrieve a list of device reachability status event subscription(s)", "responses": { "200": { "content": { "application/json": { "examples": { "List of Subscriptions": { "description": "A list of API consumer subscriptions. If a 3-legged access token is used, the list is specific to the device associated with that token.", "value": [ { "id": "550e8400-e29b-41d4-a716-446655440000", "sink": "https://endpoint.example.com/sink", "protocol": "HTTP", "types": [ "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-data" ], "config": { "subscriptionDetail": {}, "subscriptionExpireTime": "2024-07-17T13:18:23.682Z", "subscriptionMaxEvents": 5, "initialEvent": true }, "startsAt": "2024-07-03T21:12:02.871Z", "expiresAt": "2024-07-03T21:12:02.871Z", "status": "ACTIVE" } ] }, "Empty List of Subscriptions": { "description": "The API consumer either has no subscriptions or, if a 3-legged access token is used, has none for the device associated with that token.", "value": [] } }, "schema": { "type": "array", "minItems": 0, "items": { "description": "Represents a event-type subscription.", "type": "object", "required": [ "sink", "protocol", "config", "types", "id" ], "properties": { "protocol": { "type": "string", "enum": [ "HTTP", "MQTT3", "MQTT5", "AMQP", "NATS", "KAFKA" ], "description": "Identifier of a delivery protocol. Only HTTP is allowed for now" }, "sink": { "type": "string", "format": "uri", "pattern": "^https:\\/\\/.+$", "description": "The address to which events shall be delivered using the selected protocol." }, "types": { "description": "Camara Event types eligible to be delivered by this subscription.\nNote: For the current Commonalities API design guidelines, only one event type per subscription is allowed\n", "type": "array", "minItems": 1, "maxItems": 1, "items": { "type": "string", "description": "reachability-data - Event triggered when the device is connected to the network for Data usage (regardless of the SMS reachability).\n\nreachability-sms - Event triggered when the device is connected to the network only for SMS usage\n\nreachability-disconnected - Event triggered when the device is not connected.\n", "enum": [ "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-data", "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-sms", "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-disconnected" ] } }, "config": { "description": "Implementation-specific configuration parameters needed by the subscription manager for acquiring events.\nIn CAMARA we have predefined attributes like `subscriptionExpireTime`, `subscriptionMaxEvents`, `initialEvent`\nSpecific event type attributes must be defined in `subscriptionDetail`\nNote: if a request is performed for several event type, all subscribed event will use same `config` parameters.\n", "type": "object", "required": [ "subscriptionDetail" ], "properties": { "subscriptionDetail": { "description": "The detail of the requested event subscription.", "type": "object", "properties": { "device": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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.\n", "type": "object", "properties": { "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}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 } } }, "subscriptionExpireTime": { "type": "string", "format": "date-time", "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 }, "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.\nExample: Consumer subscribes to reachability SMS. If consumer sets initialEvent to true and device is already reachable by SMS, an event is triggered.\n" } } }, "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." }, "startsAt": { "type": "string", "format": "date-time", "description": "Date when the event subscription will begin/began\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\nRecommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)\n" }, "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.\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\nRecommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)\n" }, "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\n\n\n\n\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" ] } } } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "GENERIC_400_INVALID_ARGUMENT": { "description": "Invalid Argument. Generic Syntax Exception", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 400 ] }, "code": { "enum": [ "INVALID_ARGUMENT" ] } } } ] } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "GENERIC_401_UNAUTHENTICATED": { "description": "Request cannot be authenticated and a new authentication is required", "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials. A new authentication is required." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 401 ] }, "code": { "enum": [ "UNAUTHENTICATED" ] } } } ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "GENERIC_403_PERMISSION_DENIED": { "description": "Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security", "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 403 ] }, "code": { "enum": [ "PERMISSION_DENIED" ] } } } ] } } }, "description": "" } } }, "post": { "tags": [ "Device Reachability Status Subscriptions v0.8" ], "summary": "Create a device reachability status event subscription for a device", "parameters": [ { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": {} }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "createDeviceReachabilityStatusSubscription-DS-RES-V080", "description": "Create a device reachability status event subscription for a device", "responses": { "201": { "content": { "application/json": { "examples": { "Active Subscription": { "value": { "id": "550e8400-e29b-41d4-a716-446655440000", "sink": "https://endpoint.example.com/sink", "protocol": "HTTP", "types": [ "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-data" ], "config": { "subscriptionDetail": {}, "subscriptionExpireTime": "2024-07-17T13:18:23.682Z", "subscriptionMaxEvents": 5, "initialEvent": true }, "startsAt": "2024-07-03T21:12:02.871Z", "expiresAt": "2024-07-03T21:12:02.871Z", "status": "ACTIVE" } }, "Active Subscription With Device Disambiguation": { "value": { "id": "550e8400-e29b-41d4-a716-446655440000", "sink": "https://endpoint.example.com/sink", "protocol": "HTTP", "types": [ "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-data" ], "config": { "subscriptionDetail": { "device": { "phoneNumber": "+99999991000" } }, "subscriptionExpireTime": "2024-07-17T13:18:23.682Z", "subscriptionMaxEvents": 5, "initialEvent": true }, "startsAt": "2024-07-03T21:12:02.871Z", "expiresAt": "2024-07-03T21:12:02.871Z", "status": "ACTIVE" } } }, "schema": { "description": "Represents a event-type subscription.", "type": "object", "required": [ "sink", "protocol", "config", "types", "id" ], "properties": { "protocol": { "type": "string", "enum": [ "HTTP", "MQTT3", "MQTT5", "AMQP", "NATS", "KAFKA" ], "description": "Identifier of a delivery protocol. Only HTTP is allowed for now" }, "sink": { "type": "string", "format": "uri", "pattern": "^https:\\/\\/.+$", "description": "The address to which events shall be delivered using the selected protocol." }, "types": { "description": "Camara Event types eligible to be delivered by this subscription.\nNote: For the current Commonalities API design guidelines, only one event type per subscription is allowed\n", "type": "array", "minItems": 1, "maxItems": 1, "items": { "type": "string", "description": "reachability-data - Event triggered when the device is connected to the network for Data usage (regardless of the SMS reachability).\n\nreachability-sms - Event triggered when the device is connected to the network only for SMS usage\n\nreachability-disconnected - Event triggered when the device is not connected.\n", "enum": [ "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-data", "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-sms", "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-disconnected" ] } }, "config": { "description": "Implementation-specific configuration parameters needed by the subscription manager for acquiring events.\nIn CAMARA we have predefined attributes like `subscriptionExpireTime`, `subscriptionMaxEvents`, `initialEvent`\nSpecific event type attributes must be defined in `subscriptionDetail`\nNote: if a request is performed for several event type, all subscribed event will use same `config` parameters.\n", "type": "object", "required": [ "subscriptionDetail" ], "properties": { "subscriptionDetail": { "description": "The detail of the requested event subscription.", "type": "object", "properties": { "device": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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.\n", "type": "object", "properties": { "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}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 } } }, "subscriptionExpireTime": { "type": "string", "format": "date-time", "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 }, "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.\nExample: Consumer subscribes to reachability SMS. If consumer sets initialEvent to true and device is already reachable by SMS, an event is triggered.\n" } } }, "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." }, "startsAt": { "type": "string", "format": "date-time", "description": "Date when the event subscription will begin/began\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\nRecommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)\n" }, "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.\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\nRecommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)\n" }, "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\n\n\n\n\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" ] } } } } }, "description": "" }, "202": { "content": { "application/json": { "examples": { "Example_1": { "value": { "id": "qs15-h556-rt89-1298" } } }, "schema": { "description": "Response for a device reachability status operation managed asynchronously (Creation or Deletion)", "type": "object", "required": [ "id" ], "properties": { "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." } } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "GENERIC_400_INVALID_CREDENTIAL": { "description": "Invalid sink credential type", "value": { "status": 400, "code": "INVALID_CREDENTIAL", "message": "Only Access token is supported" } }, "GENERIC_400_INVALID_SINK": { "description": "Invalid sink value", "value": { "status": 400, "code": "INVALID_SINK", "message": "sink not valid for the specified protocol" } }, "GENERIC_400_INVALID_PROTOCOL": { "description": "Invalid protocol for events subscription management", "value": { "status": 400, "code": "INVALID_PROTOCOL", "message": "Only HTTP is supported" } }, "GENERIC_400_INVALID_TOKEN": { "description": "Invalid token type for sink credential of type ACCESSTOKEN", "value": { "status": 400, "code": "INVALID_TOKEN", "message": "Only bearer token is supported" } }, "GENERIC_400_OUT_OF_RANGE": { "description": "Out of Range. Specific Syntax Exception used when a given field has a pre-defined range or a invalid filter criteria combination is requested", "value": { "status": 400, "code": "OUT_OF_RANGE", "message": "Client specified an invalid range." } }, "GENERIC_400_INVALID_ARGUMENT": { "description": "Invalid Argument. Generic Syntax Exception", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 400 ] }, "code": { "enum": [ "INVALID_ARGUMENT", "OUT_OF_RANGE", "INVALID_PROTOCOL", "INVALID_CREDENTIAL", "INVALID_TOKEN", "INVALID_SINK" ] } } } ] } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "GENERIC_401_UNAUTHENTICATED": { "description": "Request cannot be authenticated and a new authentication is required", "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials. A new authentication is required." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 401 ] }, "code": { "enum": [ "UNAUTHENTICATED" ] } } } ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "GENERIC_403_SUBSCRIPTION_MISMATCH": { "description": "Inconsistent access token for requested subscription", "value": { "status": 403, "code": "SUBSCRIPTION_MISMATCH", "message": "Inconsistent access token for requested events subscription" } }, "GENERIC_403_PERMISSION_DENIED": { "description": "Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security", "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 403 ] }, "code": { "enum": [ "PERMISSION_DENIED", "SUBSCRIPTION_MISMATCH" ] } } } ] } } }, "description": "" }, "409": { "content": { "application/json": { "examples": { "GENERIC_409_ABORTED": { "description": "Concurreny of processes of the same nature/scope", "value": { "status": 409, "code": "ABORTED", "message": "Concurrency conflict." } }, "GENERIC_409_ALREADY_EXISTS": { "description": "Trying to create an existing resource", "value": { "status": 409, "code": "ALREADY_EXISTS", "message": "The resource that a client tried to create already exists." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 409 ] }, "code": { "enum": [ "ABORTED", "ALREADY_EXISTS" ] } } } ] } } }, "description": "" }, "422": { "content": { "application/json": { "examples": { "GENERIC_422_MULTIEVENT_SUBSCRIPTION_NOT_SUPPORTED": { "description": "Multi event types subscription is not supported", "value": { "status": 422, "code": "MULTIEVENT_SUBSCRIPTION_NOT_SUPPORTED", "message": "Multi event types subscription not managed" } }, "GENERIC_422_SERVICE_NOT_APPLICABLE": { "description": "Service not applicable for the provided identifier", "value": { "status": 422, "code": "SERVICE_NOT_APPLICABLE", "message": "The service is not available for the provided identifier." } }, "GENERIC_422_UNSUPPORTED_IDENTIFIER": { "description": "None of the provided identifiers is supported by the implementation", "value": { "status": 422, "code": "UNSUPPORTED_IDENTIFIER", "message": "The identifier provided is not supported." } }, "GENERIC_422_MISSING_IDENTIFIER": { "description": "An identifier is not included in the request and the device or phone number identification cannot be derived from the 3-legged access token", "value": { "status": 422, "code": "MISSING_IDENTIFIER", "message": "The device cannot be identified." } }, "GENERIC_422_UNNECESSARY_IDENTIFIER": { "description": "An explicit identifier is provided when a device or phone number has already been identified from the access token", "value": { "status": 422, "code": "UNNECESSARY_IDENTIFIER", "message": "The device is already identified by the access token." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 422 ] }, "code": { "enum": [ "SERVICE_NOT_APPLICABLE", "MISSING_IDENTIFIER", "UNSUPPORTED_IDENTIFIER", "UNNECESSARY_IDENTIFIER", "MULTIEVENT_SUBSCRIPTION_NOT_SUPPORTED" ] } } } ] } } }, "description": "" }, "429": { "content": { "application/json": { "examples": { "GENERIC_429_QUOTA_EXCEEDED": { "description": "Request is rejected due to exceeding a business quota limit", "value": { "status": 429, "code": "QUOTA_EXCEEDED", "message": "Out of resource quota." } }, "GENERIC_429_TOO_MANY_REQUESTS": { "description": "Access to the API has been temporarily blocked due to rate or spike arrest limits being reached", "value": { "status": 429, "code": "TOO_MANY_REQUESTS", "message": "Rate limit reached." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 429 ] }, "code": { "enum": [ "QUOTA_EXCEEDED", "TOO_MANY_REQUESTS" ] } } } ] } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "Create Reachability Data Subscription": { "value": { "sink": "https://endpoint.example.com/sink", "sinkCredential": { "credentialType": "ACCESSTOKEN", "accessToken": "xxx", "accessTokenExpiresUtc": "2024-02-17T16:23:45Z", "accessTokenType": "bearer" }, "protocol": "HTTP", "types": [ "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-data" ], "config": { "subscriptionDetail": { "device": { "phoneNumber": "+99999991000" } }, "subscriptionExpireTime": "2023-01-17T13:18:23.682Z", "subscriptionMaxEvents": 5, "initialEvent": true } } }, "Create Reachability SMS Subscription": { "value": { "sink": "https://endpoint.example.com/sink", "sinkCredential": { "credentialType": "ACCESSTOKEN", "accessToken": "xxx", "accessTokenExpiresUtc": "2024-02-17T16:23:45Z", "accessTokenType": "bearer" }, "protocol": "HTTP", "types": [ "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-sms" ], "config": { "subscriptionDetail": { "device": { "phoneNumber": "+99999991000" } }, "subscriptionExpireTime": "2023-01-17T13:18:23.682Z", "subscriptionMaxEvents": 5, "initialEvent": true } } }, "Create Reachability Disconnected Subscription": { "value": { "sink": "https://endpoint.example.com/sink", "sinkCredential": { "credentialType": "ACCESSTOKEN", "accessToken": "xxx", "accessTokenExpiresUtc": "2024-02-17T16:23:45Z", "accessTokenType": "bearer" }, "protocol": "HTTP", "types": [ "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-disconnected" ], "config": { "subscriptionDetail": { "device": { "phoneNumber": "+99999991000" } }, "subscriptionExpireTime": "2023-01-17T13:18:23.682Z", "subscriptionMaxEvents": 5, "initialEvent": true } } } }, "schema": { "description": "The request for creating a event-type event subscription", "type": "object", "required": [ "sink", "protocol", "config", "types" ], "properties": { "protocol": { "type": "string", "enum": [ "HTTP", "MQTT3", "MQTT5", "AMQP", "NATS", "KAFKA" ], "description": "Identifier of a delivery protocol. Only HTTP is allowed for now" }, "sink": { "type": "string", "format": "uri", "pattern": "^https:\\/\\/.+$", "description": "The address to which events shall be delivered using the selected protocol." }, "sinkCredential": { "description": "A sink credential provides authentication or authorization information necessary to enable delivery of events to a target.", "type": "object", "properties": { "credentialType": { "type": "string", "enum": [ "PLAIN", "ACCESSTOKEN", "REFRESHTOKEN" ], "description": "The type of the credential.\nNote: Type of the credential - MUST be set to ACCESSTOKEN for now\n" } }, "required": [ "credentialType" ] }, "types": { "description": "Camara Event types eligible to be delivered by this subscription.\nNote: For the current Commonalities API design guidelines, only one event type per subscription is allowed, yet in the following releases use of array of event types SHALL be specified without changing this definition.\n", "type": "array", "minItems": 1, "maxItems": 1, "items": { "type": "string", "description": "reachability-data - Event triggered when the device is connected to the network for Data usage (regardless of the SMS reachability).\n\nreachability-sms - Event triggered when the device is connected to the network only for SMS usage\n\nreachability-disconnected - Event triggered when the device is not connected.\n", "enum": [ "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-data", "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-sms", "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-disconnected" ] } }, "config": { "description": "Implementation-specific configuration parameters needed by the subscription manager for acquiring events.\nIn CAMARA we have predefined attributes like `subscriptionExpireTime`, `subscriptionMaxEvents`, `initialEvent`\nSpecific event type attributes must be defined in `subscriptionDetail`\nNote: if a request is performed for several event type, all subscribed event will use same `config` parameters.\n", "type": "object", "required": [ "subscriptionDetail" ], "properties": { "subscriptionDetail": { "description": "The detail of the requested event subscription.", "type": "object", "properties": { "device": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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.\n", "type": "object", "properties": { "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}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 } } }, "subscriptionExpireTime": { "type": "string", "format": "date-time", "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 }, "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.\nExample: Consumer subscribes to reachability SMS. If consumer sets initialEvent to true and device is already reachable by SMS, an event is triggered.\n" } } } } } } }, "description": "" } } }, "/slice/v1/slices": { "get": { "tags": [ "Network Slicing v1.0.0" ], "summary": "Returns All Slices", "operationId": "getAllSlices", "description": "Returns All created Network Slices", "responses": { "200": { "content": { "application/json": { "examples": { "Example_1": { "value": [ { "slice": { "name": "Concert-2029-Big-Arena", "notificationUrl": "", "notificationAuthToken": "", "networkIdentifier": { "mcc": "", "mnc": "" }, "sliceInfo": { "serviceType": 0, "differentiator": "" }, "areaOfService": { "polygon": [ { "lat": 0, "lon": 0 } ] }, "maxDataConnections": 0, "maxDevices": 0, "delayTolerance": "", "servicePriority": 0, "sliceDownlinkThroughput": { "guaranteed": 0, "maximum": 0 }, "sliceUplinkThroughput": { "guaranteed": 0, "maximum": 0 }, "deviceDownlinkThroughput": { "guaranteed": 0, "maximum": 0 }, "deviceUplinkThroughput": { "guaranteed": 0, "maximum": 0 }, "isolationLevel": "NO-ISOLATION", "qos": "", "udm5Qi": "", "customer": { "name": "", "description": "", "address": "", "contact": "" } }, "csi_id": "", "name": "", "state": "PENDING", "provisioner": "" } ] } }, "schema": { "items": { "properties": { "slice": { "properties": { "name": { "type": "string", "maxLength": 64, "minLength": 5, "pattern": "^[a-zA-Z0-9][a-zA-Z0-9-]{3,63}[a-zA-Z0-9]$", "title": "Name", "description": "Optional short name for the slice. Must be ASCII characters, digits and dash. Like name of an event.", "nullable": true }, "notificationUrl": { "type": "string", "maxLength": 255, "title": "Notificationurl", "description": "Contact attached to the order to send back information regarding this order." }, "notificationAuthToken": { "type": "string", "maxLength": 4096, "title": "Notificationauthtoken", "description": "Authorization token for notification sending.", "nullable": true }, "networkIdentifier": { "properties": { "mcc": { "type": "string", "maxLength": 64, "minLength": 2, "pattern": "[0-9]{3}|[a-zA-Z]{2}|[A-Za-z]{3,64}", "title": "Mcc", "description": "Country name, short name, or MCC code. One cannot use country names if a country has several MCC codes, such as the US." }, "mnc": { "type": "string", "maxLength": 3, "minLength": 2, "pattern": "^[0-9]{2,3}$", "title": "Mnc" } }, "type": "object", "required": [ "mcc", "mnc" ], "title": "NetworkIdentifier" }, "sliceInfo": { "properties": { "serviceType": { "type": "integer", "format": "int32", "title": "Servicetype", "description": "Name or ID of slice type (e.g. eMBB, URLLC, MIoT or numeric SST).", "minimum": -2147483648, "maximum": 2147483647 }, "differentiator": { "type": "string", "maxLength": 25, "pattern": "^[A-Fa-f0-9]{1,6}$", "title": "Differentiator", "description": "Differentiator identifies the slice within the type.", "nullable": true } }, "type": "object", "required": [ "serviceType" ], "title": "SliceInfo" }, "areaOfService": { "allOf": [ { "properties": { "polygon": { "items": { "properties": { "lat": { "type": "number", "maximum": 90, "minimum": -90, "title": "Latitude", "default": 0 }, "lon": { "type": "number", "maximum": 180, "minimum": -180, "title": "Longitude", "default": 0 } }, "type": "object", "title": "Point" }, "type": "array", "minItems": 4, "title": "Polygon", "description": "Corners of the polygon defining the area that must be covered. The actual area may be larger, depending on cell areas." } }, "type": "object", "required": [ "polygon" ], "title": "AreaOfService" } ], "description": "Specifies the area where the slice can be used" }, "maxDataConnections": { "type": "integer", "maximum": 1000000, "minimum": 0, "format": "int32", "title": "Maxdataconnections", "description": "Maximum number of data connection sessions in the slice.", "nullable": true }, "maxDevices": { "type": "integer", "maximum": 1000, "minimum": 0, "format": "int32", "title": "Maxdevices", "description": "Maximum number of devices using the slice.", "nullable": true }, "delayTolerance": { "type": "string", "maxLength": 20, "title": "Delaytolerance", "description": "Delaytolerance attribute, True/False or SUPPORTED/NOT SUPPORTED", "nullable": true }, "servicePriority": { "type": "integer", "maximum": 100, "minimum": 0, "format": "int32", "title": "Servicepriority", "description": "ServicePriority attribute", "nullable": true }, "sliceDownlinkThroughput": { "allOf": [ { "properties": { "guaranteed": { "type": "number", "title": "Guaranteed", "description": "Guaranteed throughput in kbps.", "nullable": true }, "maximum": { "type": "number", "title": "Maximum", "description": "Maximum throughput in kbps.", "nullable": true } }, "type": "object", "title": "Throughput" } ], "description": "Data rate parameters (max/guaranteed) supported by the network slice for all devices together in downlink" }, "sliceUplinkThroughput": { "allOf": [ { "properties": { "guaranteed": { "type": "number", "title": "Guaranteed", "description": "Guaranteed throughput in kbps.", "nullable": true }, "maximum": { "type": "number", "title": "Maximum", "description": "Maximum throughput in kbps.", "nullable": true } }, "type": "object", "title": "Throughput" } ], "description": "Data rate parameters (max/guaranteed) supported by the network slice for all devices together in uplink" }, "deviceDownlinkThroughput": { "allOf": [ { "properties": { "guaranteed": { "type": "number", "title": "Guaranteed", "description": "Guaranteed throughput in kbps.", "nullable": true }, "maximum": { "type": "number", "title": "Maximum", "description": "Maximum throughput in kbps.", "nullable": true } }, "type": "object", "title": "Throughput" } ], "description": "Data rate parameters (max/guaranteed) supported by the network slice per device in downlink" }, "deviceUplinkThroughput": { "allOf": [ { "properties": { "guaranteed": { "type": "number", "title": "Guaranteed", "description": "Guaranteed throughput in kbps.", "nullable": true }, "maximum": { "type": "number", "title": "Maximum", "description": "Maximum throughput in kbps.", "nullable": true } }, "type": "object", "title": "Throughput" } ], "description": "Data rate parameters (max/guaranteed) supported by the network slice per device in uplink" }, "isolationLevel": { "allOf": [ { "type": "string", "enum": [ "NO-ISOLATION", "PHYSICAL-ISOLATION", "LOGICAL-ISOLATION" ], "title": "IsolationLevel" } ], "description": "Parameter describing the isolation type" }, "qos": { "type": "string", "maxLength": 20, "title": "Qos", "description": "QoS Identifier", "nullable": true }, "udm5Qi": { "type": "string", "maxLength": 20, "title": "Udm5Qi", "description": "5G QoS Identifier", "nullable": true }, "customer": { "allOf": [ { "properties": { "name": { "type": "string", "maxLength": 250, "title": "Name" }, "description": { "type": "string", "maxLength": 100, "title": "Description", "description": "Description of the slice, e.g. \"B2B_5G_eMBB_Slice\"", "nullable": true }, "address": { "type": "string", "maxLength": 250, "title": "Address", "description": "Address of the customer ordering slice creation.", "nullable": true }, "contact": { "type": "string", "maxLength": 250, "title": "Contact", "description": "Contact of the customer ordering slice creation.", "nullable": true } }, "type": "object", "required": [ "name" ], "title": "Customer" } ], "description": "Customer created the slice" } }, "type": "object", "required": [ "notificationUrl", "networkIdentifier", "sliceInfo" ], "title": "Slice" }, "csi_id": { "type": "string", "title": "Csi Id", "description": "Communications Service Instance identifier.", "nullable": true }, "name": { "type": "string", "title": "Name", "description": "Name/resource identifier of the network slice." }, "state": { "type": "string", "enum": [ "PENDING", "AVAILABLE", "OPERATING", "DELETED", "FAILED" ], "title": "SliceState" }, "provisioner": { "type": "string", "maxLength": 50, "title": "Provisioner", "description": "The organization provisioning the slice" } }, "type": "object", "required": [ "slice", "name", "state", "provisioner" ], "title": "SliceData" }, "type": "array", "title": "Response Getallslices" } } }, "description": "" } }, "parameters": [ { "$ref": "#/components/parameters/x-rapidapi-host" } ] }, "post": { "tags": [ "Network Slicing v1.0.0" ], "summary": "Create a network slice.", "operationId": "create_slice", "description": "Create a network slice.", "responses": { "202": { "content": { "application/json": { "examples": { "Example_1": { "value": { "slice": { "name": "Concert-2029-Big-Arena", "notificationUrl": "", "notificationAuthToken": "", "networkIdentifier": { "mcc": "", "mnc": "" }, "sliceInfo": { "serviceType": 0, "differentiator": "" }, "areaOfService": { "polygon": [ { "lat": 0, "lon": 0 } ] }, "maxDataConnections": 0, "maxDevices": 0, "delayTolerance": "", "servicePriority": 0, "sliceDownlinkThroughput": { "guaranteed": 0, "maximum": 0 }, "sliceUplinkThroughput": { "guaranteed": 0, "maximum": 0 }, "deviceDownlinkThroughput": { "guaranteed": 0, "maximum": 0 }, "deviceUplinkThroughput": { "guaranteed": 0, "maximum": 0 }, "isolationLevel": "NO-ISOLATION", "qos": "", "udm5Qi": "", "customer": { "name": "", "description": "", "address": "", "contact": "" } }, "csi_id": "", "name": "", "state": "PENDING", "provisioner": "" } } }, "schema": { "properties": { "slice": { "properties": { "name": { "type": "string", "maxLength": 64, "minLength": 5, "pattern": "^[a-zA-Z0-9][a-zA-Z0-9-]{3,63}[a-zA-Z0-9]$", "title": "Name", "description": "Optional short name for the slice. Must be ASCII characters, digits and dash. Like name of an event.", "nullable": true }, "notificationUrl": { "type": "string", "maxLength": 255, "title": "Notificationurl", "description": "Contact attached to the order to send back information regarding this order." }, "notificationAuthToken": { "type": "string", "maxLength": 4096, "title": "Notificationauthtoken", "description": "Authorization token for notification sending.", "nullable": true }, "networkIdentifier": { "properties": { "mcc": { "type": "string", "maxLength": 64, "minLength": 2, "pattern": "[0-9]{3}|[a-zA-Z]{2}|[A-Za-z]{3,64}", "title": "Mcc", "description": "Country name, short name, or MCC code. One cannot use country names if a country has several MCC codes, such as the US." }, "mnc": { "type": "string", "maxLength": 3, "minLength": 2, "pattern": "^[0-9]{2,3}$", "title": "Mnc" } }, "type": "object", "required": [ "mcc", "mnc" ], "title": "NetworkIdentifier" }, "sliceInfo": { "properties": { "serviceType": { "type": "integer", "format": "int32", "title": "Servicetype", "description": "Name or ID of slice type (e.g. eMBB, URLLC, MIoT or numeric SST).", "minimum": -2147483648, "maximum": 2147483647 }, "differentiator": { "type": "string", "maxLength": 25, "pattern": "^[A-Fa-f0-9]{1,6}$", "title": "Differentiator", "description": "Differentiator identifies the slice within the type.", "nullable": true } }, "type": "object", "required": [ "serviceType" ], "title": "SliceInfo" }, "areaOfService": { "allOf": [ { "properties": { "polygon": { "items": { "properties": { "lat": { "type": "number", "maximum": 90, "minimum": -90, "title": "Latitude", "default": 0 }, "lon": { "type": "number", "maximum": 180, "minimum": -180, "title": "Longitude", "default": 0 } }, "type": "object", "title": "Point" }, "type": "array", "minItems": 4, "title": "Polygon", "description": "Corners of the polygon defining the area that must be covered. The actual area may be larger, depending on cell areas." } }, "type": "object", "required": [ "polygon" ], "title": "AreaOfService" } ], "description": "Specifies the area where the slice can be used" }, "maxDataConnections": { "type": "integer", "maximum": 1000000, "minimum": 0, "format": "int32", "title": "Maxdataconnections", "description": "Maximum number of data connection sessions in the slice.", "nullable": true }, "maxDevices": { "type": "integer", "maximum": 1000, "minimum": 0, "format": "int32", "title": "Maxdevices", "description": "Maximum number of devices using the slice.", "nullable": true }, "delayTolerance": { "type": "string", "maxLength": 20, "title": "Delaytolerance", "description": "Delaytolerance attribute, True/False or SUPPORTED/NOT SUPPORTED", "nullable": true }, "servicePriority": { "type": "integer", "maximum": 100, "minimum": 0, "format": "int32", "title": "Servicepriority", "description": "ServicePriority attribute", "nullable": true }, "sliceDownlinkThroughput": { "allOf": [ { "properties": { "guaranteed": { "type": "number", "title": "Guaranteed", "description": "Guaranteed throughput in kbps.", "nullable": true }, "maximum": { "type": "number", "title": "Maximum", "description": "Maximum throughput in kbps.", "nullable": true } }, "type": "object", "title": "Throughput" } ], "description": "Data rate parameters (max/guaranteed) supported by the network slice for all devices together in downlink" }, "sliceUplinkThroughput": { "allOf": [ { "properties": { "guaranteed": { "type": "number", "title": "Guaranteed", "description": "Guaranteed throughput in kbps.", "nullable": true }, "maximum": { "type": "number", "title": "Maximum", "description": "Maximum throughput in kbps.", "nullable": true } }, "type": "object", "title": "Throughput" } ], "description": "Data rate parameters (max/guaranteed) supported by the network slice for all devices together in uplink" }, "deviceDownlinkThroughput": { "allOf": [ { "properties": { "guaranteed": { "type": "number", "title": "Guaranteed", "description": "Guaranteed throughput in kbps.", "nullable": true }, "maximum": { "type": "number", "title": "Maximum", "description": "Maximum throughput in kbps.", "nullable": true } }, "type": "object", "title": "Throughput" } ], "description": "Data rate parameters (max/guaranteed) supported by the network slice per device in downlink" }, "deviceUplinkThroughput": { "allOf": [ { "properties": { "guaranteed": { "type": "number", "title": "Guaranteed", "description": "Guaranteed throughput in kbps.", "nullable": true }, "maximum": { "type": "number", "title": "Maximum", "description": "Maximum throughput in kbps.", "nullable": true } }, "type": "object", "title": "Throughput" } ], "description": "Data rate parameters (max/guaranteed) supported by the network slice per device in uplink" }, "isolationLevel": { "allOf": [ { "type": "string", "enum": [ "NO-ISOLATION", "PHYSICAL-ISOLATION", "LOGICAL-ISOLATION" ], "title": "IsolationLevel" } ], "description": "Parameter describing the isolation type" }, "qos": { "type": "string", "maxLength": 20, "title": "Qos", "description": "QoS Identifier", "nullable": true }, "udm5Qi": { "type": "string", "maxLength": 20, "title": "Udm5Qi", "description": "5G QoS Identifier", "nullable": true }, "customer": { "allOf": [ { "properties": { "name": { "type": "string", "maxLength": 250, "title": "Name" }, "description": { "type": "string", "maxLength": 100, "title": "Description", "description": "Description of the slice, e.g. \"B2B_5G_eMBB_Slice\"", "nullable": true }, "address": { "type": "string", "maxLength": 250, "title": "Address", "description": "Address of the customer ordering slice creation.", "nullable": true }, "contact": { "type": "string", "maxLength": 250, "title": "Contact", "description": "Contact of the customer ordering slice creation.", "nullable": true } }, "type": "object", "required": [ "name" ], "title": "Customer" } ], "description": "Customer created the slice" } }, "type": "object", "required": [ "notificationUrl", "networkIdentifier", "sliceInfo" ], "title": "Slice" }, "csi_id": { "type": "string", "title": "Csi Id", "description": "Communications Service Instance identifier.", "nullable": true }, "name": { "type": "string", "title": "Name", "description": "Name/resource identifier of the network slice." }, "state": { "type": "string", "enum": [ "PENDING", "AVAILABLE", "OPERATING", "DELETED", "FAILED" ], "title": "SliceState" }, "provisioner": { "type": "string", "maxLength": 50, "title": "Provisioner", "description": "The organization provisioning the slice" } }, "type": "object", "required": [ "slice", "name", "state", "provisioner" ], "title": "SliceData" } } }, "description": "" }, "422": { "content": { "application/json": { "examples": { "Example_1": { "value": { "detail": [ { "loc": [], "msg": "", "type": "" } ] } } }, "schema": { "properties": { "detail": { "items": { "properties": { "loc": { "type": "array", "items": { "type": "string" }, "title": "Location" }, "msg": { "type": "string", "title": "Message" }, "type": { "type": "string", "title": "Error Type" } }, "type": "object", "required": [ "loc", "msg", "type" ], "title": "ValidationError" }, "type": "array", "title": "Detail" } }, "type": "object", "title": "HTTPValidationError" } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "NETWORK_SLICE_CREATION": { "value": { "notificationUrl": "https://example.com/notify", "notificationAuthToken": "6207f4c159esfnjsf6280c0e8417090d91710b8c9369f21d9b616ebe809d28c5dc4b1428447fa5d83988b516595253bae24e2a9eb22f43523f2ab1997dd7", "networkIdentifier": { "mcc": "236", "mnc": "30" }, "sliceInfo": { "serviceType": 1, "differentiator": "0003E8" }, "maxDataConnections": 42312, "maxDevices": 33, "sliceUplinkThroughput": { "guaranteed": 15, "maximum": 999999 }, "deviceUplinkThroughput": { "guaranteed": 10, "maximum": 20 } } } }, "schema": { "properties": { "name": { "type": "string", "maxLength": 64, "minLength": 5, "pattern": "^[a-zA-Z0-9][a-zA-Z0-9-]{3,63}[a-zA-Z0-9]$", "title": "Name", "description": "Optional short name for the slice. Must be ASCII characters, digits and dash. Like name of an event.", "nullable": true }, "notificationUrl": { "type": "string", "maxLength": 255, "title": "Notificationurl", "description": "Contact attached to the order to send back information regarding this order." }, "notificationAuthToken": { "type": "string", "maxLength": 4096, "title": "Notificationauthtoken", "description": "Authorization token for notification sending.", "nullable": true }, "networkIdentifier": { "properties": { "mcc": { "type": "string", "maxLength": 64, "minLength": 2, "pattern": "[0-9]{3}|[a-zA-Z]{2}|[A-Za-z]{3,64}", "title": "Mcc", "description": "Country name, short name, or MCC code. One cannot use country names if a country has several MCC codes, such as the US." }, "mnc": { "type": "string", "maxLength": 3, "minLength": 2, "pattern": "^[0-9]{2,3}$", "title": "Mnc" } }, "type": "object", "required": [ "mcc", "mnc" ], "title": "NetworkIdentifier" }, "sliceInfo": { "properties": { "serviceType": { "type": "integer", "format": "int32", "title": "Servicetype", "description": "Name or ID of slice type (e.g. eMBB, URLLC, MIoT or numeric SST).", "minimum": -2147483648, "maximum": 2147483647 }, "differentiator": { "type": "string", "maxLength": 25, "pattern": "^[A-Fa-f0-9]{1,6}$", "title": "Differentiator", "description": "Differentiator identifies the slice within the type.", "nullable": true } }, "type": "object", "required": [ "serviceType" ], "title": "SliceInfo" }, "areaOfService": { "allOf": [ { "properties": { "polygon": { "items": { "properties": { "lat": { "type": "number", "maximum": 90, "minimum": -90, "title": "Latitude", "default": 0 }, "lon": { "type": "number", "maximum": 180, "minimum": -180, "title": "Longitude", "default": 0 } }, "type": "object", "title": "Point" }, "type": "array", "minItems": 4, "title": "Polygon", "description": "Corners of the polygon defining the area that must be covered. The actual area may be larger, depending on cell areas." } }, "type": "object", "required": [ "polygon" ], "title": "AreaOfService" } ], "description": "Specifies the area where the slice can be used" }, "maxDataConnections": { "type": "integer", "maximum": 1000000, "minimum": 0, "format": "int32", "title": "Maxdataconnections", "description": "Maximum number of data connection sessions in the slice.", "nullable": true }, "maxDevices": { "type": "integer", "maximum": 1000, "minimum": 0, "format": "int32", "title": "Maxdevices", "description": "Maximum number of devices using the slice.", "nullable": true }, "delayTolerance": { "type": "string", "maxLength": 20, "title": "Delaytolerance", "description": "Delaytolerance attribute, True/False or SUPPORTED/NOT SUPPORTED", "nullable": true }, "servicePriority": { "type": "integer", "maximum": 100, "minimum": 0, "format": "int32", "title": "Servicepriority", "description": "ServicePriority attribute", "nullable": true }, "sliceDownlinkThroughput": { "allOf": [ { "properties": { "guaranteed": { "type": "number", "title": "Guaranteed", "description": "Guaranteed throughput in kbps.", "nullable": true }, "maximum": { "type": "number", "title": "Maximum", "description": "Maximum throughput in kbps.", "nullable": true } }, "type": "object", "title": "Throughput" } ], "description": "Data rate parameters (max/guaranteed) supported by the network slice for all devices together in downlink" }, "sliceUplinkThroughput": { "allOf": [ { "properties": { "guaranteed": { "type": "number", "title": "Guaranteed", "description": "Guaranteed throughput in kbps.", "nullable": true }, "maximum": { "type": "number", "title": "Maximum", "description": "Maximum throughput in kbps.", "nullable": true } }, "type": "object", "title": "Throughput" } ], "description": "Data rate parameters (max/guaranteed) supported by the network slice for all devices together in uplink" }, "deviceDownlinkThroughput": { "allOf": [ { "properties": { "guaranteed": { "type": "number", "title": "Guaranteed", "description": "Guaranteed throughput in kbps.", "nullable": true }, "maximum": { "type": "number", "title": "Maximum", "description": "Maximum throughput in kbps.", "nullable": true } }, "type": "object", "title": "Throughput" } ], "description": "Data rate parameters (max/guaranteed) supported by the network slice per device in downlink" }, "deviceUplinkThroughput": { "allOf": [ { "properties": { "guaranteed": { "type": "number", "title": "Guaranteed", "description": "Guaranteed throughput in kbps.", "nullable": true }, "maximum": { "type": "number", "title": "Maximum", "description": "Maximum throughput in kbps.", "nullable": true } }, "type": "object", "title": "Throughput" } ], "description": "Data rate parameters (max/guaranteed) supported by the network slice per device in uplink" }, "isolationLevel": { "allOf": [ { "type": "string", "enum": [ "NO-ISOLATION", "PHYSICAL-ISOLATION", "LOGICAL-ISOLATION" ], "title": "IsolationLevel" } ], "description": "Parameter describing the isolation type" }, "qos": { "type": "string", "maxLength": 20, "title": "Qos", "description": "QoS Identifier", "nullable": true }, "udm5Qi": { "type": "string", "maxLength": 20, "title": "Udm5Qi", "description": "5G QoS Identifier", "nullable": true }, "customer": { "allOf": [ { "properties": { "name": { "type": "string", "maxLength": 250, "title": "Name" }, "description": { "type": "string", "maxLength": 100, "title": "Description", "description": "Description of the slice, e.g. \"B2B_5G_eMBB_Slice\"", "nullable": true }, "address": { "type": "string", "maxLength": 250, "title": "Address", "description": "Address of the customer ordering slice creation.", "nullable": true }, "contact": { "type": "string", "maxLength": 250, "title": "Contact", "description": "Contact of the customer ordering slice creation.", "nullable": true } }, "type": "object", "required": [ "name" ], "title": "Customer" } ], "description": "Customer created the slice" } }, "type": "object", "required": [ "notificationUrl", "networkIdentifier", "sliceInfo" ], "title": "Slice" } } }, "description": "" }, "parameters": [ { "$ref": "#/components/parameters/x-rapidapi-host" } ] } }, "/passthrough/camara/v1/kyc-fill-in/kyc-fill-in/v0.4/fill-in": { "post": { "tags": [ "KYC FIll In v0.4" ], "summary": "Providing information related to a customer identity stored the account data bound to the customer's phone number.", "parameters": [ { "name": "authorization", "in": "header", "required": false, "description": "authorization header for token", "schema": { "type": "string" } }, { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": {} }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "kycFillIn", "description": " ", "responses": { "200": { "content": { "application/json": { "examples": { "KYC_Fillin200Example": { "value": { "phoneNumber": "+99999991000", "idDocument": "66666666q", "idDocumentType": "passport", "idDocumentExpiryDate": "2027-07-12", "name": "Federica Sanchez Arjona", "givenName": "Federica", "familyName": "Sanchez Arjona", "nameKanaHankaku": "federica", "nameKanaZenkaku": "Federica", "middleNames": "Sanchez", "familyNameAtBirth": "YYYY", "address": "Tokyo-to Chiyoda-ku Iidabashi 3-10-10", "streetName": "Nicolas Salmeron", "streetNumber": "4", "postalCode": "1028460", "region": "Tokyo", "locality": "ZZZZ", "country": "JP", "houseNumberExtension": "36", "birthdate": "1978-08-22", "email": "abc@example.com", "gender": "MALE", "cityOfBirth": "Madrid", "countryOfBirth": "ES", "nationality": "ES" } } }, "schema": { "type": "object", "properties": { "phoneNumber": { "type": "string", "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 '+'.", "pattern": "^\\+[1-9][0-9]{4,14}$" }, "idDocument": { "type": "string", "description": "Id number associated to the id_document of the customer stored on the Operator's system." }, "idDocumentType": { "type": "string", "enum": [ "passport", "national_id_card", "residence_permit", "diplomatic_id", "driver_licence", "social_security_id", "other" ], "description": "Type of the official identity document provided." }, "idDocumentExpiryDate": { "type": "string", "format": "date", "description": "Expiration date of the identity document (ISO 8601)." }, "name": { "type": "string", "description": "Complete name of the customer stored on the Operator's system. It is usually composed of first/given name and last/family/sur- name in a country. Depending on the country, the order of first/give name and last/family/sur- name varies, and middle name could be included. It can use givenName, middleNames, familyName and/or familyNameAtBirth. For example, in ESP, name+familyName; in NLD, it can be name+middleNames+familyName or name+middleNames+familyNameAtBirth, etc." }, "givenName": { "type": "string", "description": "First/given name or compound first/given name of the customer on the Operator's system." }, "familyName": { "type": "string", "description": "Last name, family name, or surname of the customer stored on the Operator's system." }, "nameKanaHankaku": { "type": "string", "description": "Complete name of the customer in Hankaku-Kana format (reading of name) for Japan, stored on the Operator's system." }, "nameKanaZenkaku": { "type": "string", "description": "Complete name of the customer in Zenkaku-Kana format (reading of name) for Japan, stored on the Operator's system." }, "middleNames": { "type": "string", "description": "Middle name/s of the customer stored on the Operator's system." }, "familyNameAtBirth": { "type": "string", "description": "Last/family/sur- name at birth of the customer stored on the Operator's system." }, "address": { "type": "string", "description": "Complete address of the customer stored on the Operator's system. For some countries, it is built following the usual concatenation of parameters in a country, but for other countries, this is not the case. For some countries, it can use streetName, streetNumber and/or houseNumberExtension. For example, in ESP, streetName+streetNumber; in NLD, it can be streetName+streetNumber or streetName+streetNumber+houseNumberExtension." }, "streetName": { "type": "string", "description": "Name of the street of the customer's address on the Operator's system. It should not include the type of the street." }, "streetNumber": { "type": "string", "description": "The street number of the customer's address on the Operator's system. Number identifying a specific property on the 'streetName'." }, "postalCode": { "type": "string", "description": "The postal code or Zip code of the customer's address, stored on the Operator's system." }, "region": { "type": "string", "description": "Region/prefecture of the customer's address, stored on the Operator's system." }, "locality": { "type": "string", "description": "Locality of the customer's address, stored on the Operator's system." }, "country": { "type": "string", "description": "Country of the customer's address stored on the Operator's system. Format ISO 3166-1 alpha-2." }, "houseNumberExtension": { "type": "string", "description": "House number extension of the customer stored on the Operator's system. Specific identifier of the house needed depending on the property type. For example, number of apartment in an apartment building." }, "birthdate": { "type": "string", "format": "date", "description": "Birthdate of the customer, in ISO 8601 calendar date format (YYYY-MM-DD), stored on the Operator's system." }, "email": { "type": "string", "format": "email", "description": "Email address of the customer in the RFC specified format (local-part@domain), stored on the Operator's system." }, "gender": { "type": "string", "description": "Gender of the customer stored on the Operator's system (Male/Female/Other).", "enum": [ "MALE", "FEMALE", "OTHER" ] }, "cityOfBirth": { "type": "string", "description": "City where the customer was born." }, "countryOfBirth": { "type": "string", "description": "Country where the customer was born. Format ISO 3166-1 alpha-2." }, "nationality": { "type": "string", "description": "ISO 3166-1 alpha-2 code of the customer’s nationality. In the case a customer has more than one nationality, it is supposed to be the nationality related to the ID document provided in the match request." } } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "GENERIC_400_INVALID_ARGUMENT": { "description": "Invalid Argument. Generic Syntax Exception", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 400 ] }, "code": { "enum": [ "INVALID_ARGUMENT" ] } } } ] } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "GENERIC_401_UNAUTHENTICATED": { "description": "Request cannot be authenticated and a new authentication is required", "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials. A new authentication is required." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 401 ] }, "code": { "enum": [ "UNAUTHENTICATED" ] } } } ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "GENERIC_403_PERMISSION_DENIED": { "description": "Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security", "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 403 ] }, "code": { "enum": [ "PERMISSION_DENIED" ] } } } ] } } }, "description": "" }, "404": { "content": { "application/json": { "examples": { "GENERIC_404_IDENTIFIER_NOT_FOUND": { "description": "The phone number is not associated with a CSP customer account", "value": { "status": 404, "code": "IDENTIFIER_NOT_FOUND", "message": "The phone number provided is not associated with a customer account" } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 404 ] }, "code": { "enum": [ "IDENTIFIER_NOT_FOUND" ] } } } ] } } }, "description": "" }, "422": { "content": { "application/json": { "examples": { "GENERIC_422_SERVICE_NOT_APPLICABLE": { "description": "Service is not applicable for the provided phone number", "value": { "status": 422, "code": "SERVICE_NOT_APPLICABLE", "message": "The service is not applicable for the provided phone number" } }, "GENERIC_422_UNNECESSARY_IDENTIFIER": { "description": "An explicit phone number has been provided when one is already associated with the access token", "value": { "status": 422, "code": "UNNECESSARY_IDENTIFIER", "message": "An explicit phone number has been provided when one is already associated with the access token" } }, "GENERIC_422_MISSING_IDENTIFIER": { "description": "No phone number has been provided either explicitly or associated with the access token", "value": { "status": 422, "code": "MISSING_IDENTIFIER", "message": "No phone number has been provided" } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 422 ] }, "code": { "enum": [ "SERVICE_NOT_APPLICABLE", "MISSING_IDENTIFIER", "UNNECESSARY_IDENTIFIER" ] } } } ] } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "KYC_Fill_In": { "value": { "phoneNumber": "+99999991000" } }, "KYC_Fill_In_3_Legged": { "value": {} } }, "schema": { "type": "object", "properties": { "phoneNumber": { "type": "string", "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 '+'.", "pattern": "^\\+[1-9][0-9]{4,14}$" } } } } }, "description": "" } } }, "/device-attach/v0/attachments/subscribers/{operation}": { "post": { "tags": [ "Slice Device Attach v1.0.0" ], "summary": "Create subscriber in a given slice.", "parameters": [ { "name": "operation", "in": "path", "required": true, "schema": { "enum": [ "create", "remove" ], "type": "string", "title": "Operation", "default": [ "create", "remove" ] } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "manageSubscriber", "description": "Create subscriber in a given slice.", "responses": { "202": { "content": { "application/json": { "examples": { "Example_1": { "value": { "nac_resource_id": "", "resource": { "device": { "phoneNumber": "", "networkAccessIdentifier": "", "ipv4Address": { "publicAddress": "", "privateAddress": "", "publicPort": 0 }, "ipv6Address": "", "imsi": 0 }, "customer": { "name": "", "description": "", "address": "", "contact": "" }, "sliceId": "", "mobile_services": [], "traffic_categories": { "apps": { "os": "09078034-07db-4b13-a970-ab80235f7369", "apps": [] } }, "webhook": { "notificationUrl": "https://application-server.com", "notificationAuthToken": "c8974e592c2fa383d4a3960714" } }, "deviceStatus": "ATTACHED", "deviceAttachState": "Completed", "applicationAttachSuccessful": true } } }, "schema": { "properties": { "nac_resource_id": { "type": "string", "maxLength": 100, "title": "Nac Resource Id", "description": "Resource identifier of the attachment data." }, "resource": { "properties": { "device": { "properties": { "phoneNumber": { "type": "string", "maxLength": 16, "pattern": "^\\+[1-9][0-9]{4,14}$", "title": "Phonenumber", "description": "Phone number of the subscription, if any. Optional.", "nullable": true }, "networkAccessIdentifier": { "type": "string", "maxLength": 256, "pattern": "^\\S+@\\S+\\.\\S+$", "title": "Networkaccessidentifier", "description": "Email address-like external identifier of the subscription registered at the operator. If both networkAccessIdentifier and phoneNumber are included, phoneNumber may be dropped and networkAccessIdentifier may be retained.", "nullable": true }, "ipv4Address": { "allOf": [ { "properties": { "publicAddress": { "type": "string", "maxLength": 15, "title": "Publicaddress", "description": "Public IPv4 address of the device. Either of the device or the NAT the device is behind.", "nullable": true }, "privateAddress": { "type": "string", "maxLength": 15, "title": "Privateaddress", "description": "Private IPv4 address of the device, if it is behind a NAT.", "nullable": true }, "publicPort": { "type": "integer", "maximum": 65535, "minimum": 0, "format": "int32", "title": "Publicport", "description": "Public port used by the device. Port is necessary, as private address ranges overlap, and public port is used to extend the range for CGNAT.", "nullable": true } }, "type": "object", "title": "DeviceIpv4Addr" } ], "description": "IPv4 address of the device. IP address is needed for some flow-oriented services, such as QoD." }, "ipv6Address": { "type": "string", "maxLength": 45, "title": "Ipv6Address", "description": "IPv6 address of the device. IP address is needed for some flow-oriented services, such as QoD.", "nullable": true }, "imsi": { "type": "integer", "title": "Imsi", "description": "International mobile subscriber identity", "nullable": true } }, "type": "object", "title": "MobileSubscribersDevice" }, "customer": { "allOf": [ { "properties": { "name": { "type": "string", "maxLength": 250, "title": "Name" }, "description": { "type": "string", "maxLength": 100, "title": "Description", "description": "Description of the slice, e.g. \"B2B_5G_eMBB_Slice\"", "nullable": true }, "address": { "type": "string", "maxLength": 250, "title": "Address", "description": "Address of the customer ordering slice creation.", "nullable": true }, "contact": { "type": "string", "maxLength": 250, "title": "Contact", "description": "Contact of the customer ordering slice creation.", "nullable": true } }, "type": "object", "required": [ "name" ], "title": "Customer" } ], "description": "Customer who orders the device attach operations." }, "sliceId": { "type": "string", "maxLength": 64, "minLength": 5, "pattern": "^[a-zA-Z0-9][a-zA-Z0-9-]{3,63}[a-zA-Z0-9]$", "title": "Sliceid", "description": "Slice resource identifier, simple name or UUID." }, "mobile_services": { "items": { "type": "string" }, "type": "array", "maxItems": 10, "title": "Mobile Services", "description": "List of services allowed for the device.", "default": [ "Voice", "Voicemail", "5G-Data" ] }, "traffic_categories": { "allOf": [ { "properties": { "apps": { "properties": { "os": { "type": "string", "maxLength": 100, "title": "Os", "description": "Operating system identifier, UUID" }, "apps": { "items": { "type": "string", "maxLength": 50 }, "type": "array", "title": "Apps", "description": "List of application identifiers" } }, "type": "object", "required": [ "os", "apps" ], "title": "Apps" } }, "type": "object", "required": [ "apps" ], "title": "TrafficCategories" } ], "description": "Denotes the operating system id and the applications' identifiers" }, "webhook": { "allOf": [ { "properties": { "notificationUrl": { "type": "string", "maxLength": 256, "title": "Notificationurl", "description": "Notification URL for session-related events." }, "notificationAuthToken": { "type": "string", "maxLength": 4096, "title": "Notificationauthtoken", "description": "Authorization token for notification sending.", "nullable": true } }, "type": "object", "required": [ "notificationUrl" ], "title": "Webhook" } ], "description": "Callback settings for the requester application." } }, "type": "object", "required": [ "device", "sliceId" ], "title": "AttachResource" }, "deviceStatus": { "allOf": [ { "type": "string", "enum": [ "ATTACHED", "DETACHED" ], "title": "AttachStatus" } ], "description": "Status of the device in relation to the given slice e.g. ATTACHED or DETACHED." }, "deviceAttachState": { "allOf": [ { "type": "string", "enum": [ "Completed", "Accepted", "Rejected", "Acknowledged" ], "title": "OrderState" } ], "description": "Progress/state of the device attach order, e.g. Completed, Accepted, Rejected." }, "applicationAttachSuccessful": { "type": "boolean", "title": "Applicationattachsuccessful", "description": "Denotes whether successful application attach subscription was subsequently sent.", "nullable": true } }, "type": "object", "required": [ "nac_resource_id", "resource" ], "title": "AttachInfo" } } }, "description": "" }, "422": { "content": { "application/json": { "examples": { "Example_1": { "value": { "detail": [ { "loc": [], "msg": "", "type": "" } ] } } }, "schema": { "properties": { "detail": { "items": { "properties": { "loc": { "type": "array", "items": { "type": "string" }, "title": "Location" }, "msg": { "type": "string", "title": "Message" }, "type": { "type": "string", "title": "Error Type" } }, "type": "object", "required": [ "loc", "msg", "type" ], "title": "ValidationError" }, "type": "array", "title": "Detail" } }, "type": "object", "title": "HTTPValidationError" } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "CREATE_SUBSCRIBER_IN_A_GIVEN_SLICE": { "value": { "device": { "phoneNumber": "+99999991000", "imsi": 99999991000 }, "customer": { "name": "DefaultAttachOperationCustomer", "description": "I Am Default Who Order The Device Attach Operation", "address": "Dummy Customer Address", "contact": "My Contact Should Be Here" }, "sliceId": "slice-773", "mobile_services": [ "Voice", "Voicemail", "5G-Data" ], "traffic_categories": { "apps": { "os": "09078034-07db-4b13-a970-ab80235f7369", "apps": [ "Daedalus" ] } }, "webhook": { "notificationUrl": "https://application-server.com", "notificationAuthToken": "c8974e592c2fa383d4a396071" } } } }, "schema": { "properties": { "device": { "properties": { "phoneNumber": { "type": "string", "maxLength": 16, "pattern": "^\\+[1-9][0-9]{4,14}$", "title": "Phonenumber", "description": "Phone number of the subscription, if any. Optional.", "nullable": true }, "networkAccessIdentifier": { "type": "string", "maxLength": 256, "pattern": "^\\S+@\\S+\\.\\S+$", "title": "Networkaccessidentifier", "description": "Email address-like external identifier of the subscription registered at the operator. If both networkAccessIdentifier and phoneNumber are included, phoneNumber may be dropped and networkAccessIdentifier may be retained.", "nullable": true }, "ipv4Address": { "allOf": [ { "properties": { "publicAddress": { "type": "string", "maxLength": 15, "title": "Publicaddress", "description": "Public IPv4 address of the device. Either of the device or the NAT the device is behind.", "nullable": true }, "privateAddress": { "type": "string", "maxLength": 15, "title": "Privateaddress", "description": "Private IPv4 address of the device, if it is behind a NAT.", "nullable": true }, "publicPort": { "type": "integer", "maximum": 65535, "minimum": 0, "format": "int32", "title": "Publicport", "description": "Public port used by the device. Port is necessary, as private address ranges overlap, and public port is used to extend the range for CGNAT.", "nullable": true } }, "type": "object", "title": "DeviceIpv4Addr" } ], "description": "IPv4 address of the device. IP address is needed for some flow-oriented services, such as QoD." }, "ipv6Address": { "type": "string", "maxLength": 45, "title": "Ipv6Address", "description": "IPv6 address of the device. IP address is needed for some flow-oriented services, such as QoD.", "nullable": true }, "imsi": { "type": "integer", "title": "Imsi", "description": "International mobile subscriber identity", "nullable": true } }, "type": "object", "title": "MobileSubscribersDevice" }, "customer": { "allOf": [ { "properties": { "name": { "type": "string", "maxLength": 250, "title": "Name" }, "description": { "type": "string", "maxLength": 100, "title": "Description", "description": "Description of the slice, e.g. \"B2B_5G_eMBB_Slice\"", "nullable": true }, "address": { "type": "string", "maxLength": 250, "title": "Address", "description": "Address of the customer ordering slice creation.", "nullable": true }, "contact": { "type": "string", "maxLength": 250, "title": "Contact", "description": "Contact of the customer ordering slice creation.", "nullable": true } }, "type": "object", "required": [ "name" ], "title": "Customer" } ], "description": "Customer who orders the device attach operations." }, "sliceId": { "type": "string", "maxLength": 64, "minLength": 5, "pattern": "^[a-zA-Z0-9][a-zA-Z0-9-]{3,63}[a-zA-Z0-9]$", "title": "Sliceid", "description": "Slice resource identifier, simple name or UUID." }, "mobile_services": { "items": { "type": "string" }, "type": "array", "maxItems": 10, "title": "Mobile Services", "description": "List of services allowed for the device.", "default": [ "Voice", "Voicemail", "5G-Data" ] }, "traffic_categories": { "allOf": [ { "properties": { "apps": { "properties": { "os": { "type": "string", "maxLength": 100, "title": "Os", "description": "Operating system identifier, UUID" }, "apps": { "items": { "type": "string", "maxLength": 50 }, "type": "array", "title": "Apps", "description": "List of application identifiers" } }, "type": "object", "required": [ "os", "apps" ], "title": "Apps" } }, "type": "object", "required": [ "apps" ], "title": "TrafficCategories" } ], "description": "Denotes the operating system id and the applications' identifiers" }, "webhook": { "allOf": [ { "properties": { "notificationUrl": { "type": "string", "maxLength": 256, "title": "Notificationurl", "description": "Notification URL for session-related events." }, "notificationAuthToken": { "type": "string", "maxLength": 4096, "title": "Notificationauthtoken", "description": "Authorization token for notification sending.", "nullable": true } }, "type": "object", "required": [ "notificationUrl" ], "title": "Webhook" } ], "description": "Callback settings for the requester application." } }, "type": "object", "required": [ "device", "sliceId" ], "title": "AttachResource" } } }, "description": "" } } }, "/passthrough/camara/v1/device-swap/device-swap/v1/retrieve-date": { "post": { "tags": [ "Device Swap v1.0.0" ], "summary": "Get last device swap date", "parameters": [ { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": {} }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "retrieveDeviceSwapDate", "description": "Get timestamp of last device swap for a mobile user account provided with phone number.", "responses": { "200": { "content": { "application/json": { "examples": { "RETRIEVE_MONITORED_PERIOD": { "value": { "latestDeviceChange": null, "monitoredPeriod": 120 } }, "RETRIEVE_DATE": { "value": { "latestDeviceChange": "2024-09-18T07:37:53.471Z" } }, "RETRIEVE_MONITORED_NULL": { "value": { "latestDeviceChange": null } } }, "schema": { "type": "object", "required": [ "latestDeviceChange" ], "properties": { "latestDeviceChange": { "type": "string", "format": "date-time", "description": "Timestamp of latest device swap performed. It must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone. Recommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)", "nullable": true }, "monitoredPeriod": { "type": "integer", "description": "Timeframe in days for device change supervision for the phone number. It could be valued in the response if the latest Device swap occurred before this monitored period." } } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "GENERIC_400_INVALID_ARGUMENT": { "description": "Invalid Argument. Generic Syntax Exception", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param." } } }, "schema": { "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" } } } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "GENERIC_401_UNAUTHENTICATED": { "description": "Request cannot be authenticated", "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 401 ] }, "code": { "enum": [ "UNAUTHENTICATED" ] } } } ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "GENERIC_403_PERMISSION_DENIED": { "description": "Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security", "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 403 ] }, "code": { "enum": [ "PERMISSION_DENIED" ] } } } ] } } }, "description": "" }, "404": { "content": { "application/json": { "examples": { "GENERIC_404_NOT_FOUND": { "description": "Resource is not found", "value": { "status": 404, "code": "NOT_FOUND", "message": "The specified resource is not found." } }, "GENERIC_404_IDENTIFIER_NOT_FOUND": { "description": "Some identifier cannot be matched to a device", "value": { "status": 404, "code": "IDENTIFIER_NOT_FOUND", "message": "Device identifier not found." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 404 ] }, "code": { "enum": [ "NOT_FOUND", "IDENTIFIER_NOT_FOUND" ] } } } ] } } }, "description": "" }, "422": { "content": { "application/json": { "examples": { "GENERIC_422_SERVICE_NOT_APPLICABLE": { "description": "Service not applicable for the provided identifier", "value": { "status": 422, "code": "SERVICE_NOT_APPLICABLE", "message": "The service is not available for the provided identifier." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 422 ] }, "code": { "enum": [ "SERVICE_NOT_APPLICABLE" ] } } } ] } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "RETRIEVE": { "value": { "phoneNumber": "+99999991001" } } }, "schema": { "type": "object", "properties": { "phoneNumber": { "type": "string", "pattern": "^\\+[1-9][0-9]{4,14}$", "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 '+'." } } } } }, "description": "" } } }, "/passthrough/camara/v1/number-verification/number-verification/v2/device-phone-number": { "get": { "tags": [ "Number Verification v2.1" ], "summary": "Returns the phone number associated with the access token", "parameters": [ { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": {} }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "phoneNumberShare-NV-V2", "description": "Returns the phone number so the API clients can verify the number themselves:\n- It will be done for the user that has authenticated via mobile network\n- It returns the authenticated user's `device phone number` associated to the access token\n", "responses": { "200": { "content": { "application/json": { "examples": { "Example_1": { "value": { "devicePhoneNumber": "+123456789" } } }, "schema": { "type": "object", "description": "Number verification share result", "required": [ "devicePhoneNumber" ], "properties": { "devicePhoneNumber": { "type": "string", "pattern": "^\\+[1-9][0-9]{4,14}$", "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 '+'." } } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param" } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 400 ] }, "code": { "enum": [ "INVALID_ARGUMENT" ] } } } ] } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "GENERIC_401_UNAUTHENTICATED": { "description": "Request cannot be authenticated and a new authentication is required", "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials. A new authentication is required." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 401 ] }, "code": { "enum": [ "UNAUTHENTICATED" ] } } } ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "GENERIC_403_PERMISSION_DENIED": { "description": "Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security", "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action." } }, "GENERIC_403_USER_NOT_AUTHENTICATED_BY_MOBILE_NETWORK": { "value": { "status": 403, "code": "NUMBER_VERIFICATION.USER_NOT_AUTHENTICATED_BY_MOBILE_NETWORK", "message": "Client must authenticate via the mobile network to use this service" } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 403 ] }, "code": { "enum": [ "PERMISSION_DENIED", "NUMBER_VERIFICATION.USER_NOT_AUTHENTICATED_BY_MOBILE_NETWORK" ] } } } ] } } }, "description": "" } } } }, "/device-attach/v0/attachments/{resource_id}": { "get": { "tags": [ "Slice Device Attach v1.0.0" ], "summary": "Retrieve the given device attach resource.", "parameters": [ { "name": "resource_id", "in": "path", "required": true, "schema": { "type": "string", "maxLength": 36, "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$", "title": "Resource ID.", "default": "de87e438-58b4-42c3-9d49-0fbfbd878305" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "getAttachmentStatus", "description": "Retrieve the given device attach resource.", "responses": { "200": { "content": { "application/json": { "examples": { "Example_1": { "value": { "nac_resource_id": "", "resource": { "device": { "phoneNumber": "", "networkAccessIdentifier": "", "ipv4Address": { "publicAddress": "", "privateAddress": "", "publicPort": 0 }, "ipv6Address": "", "imsi": 0 }, "customer": { "name": "", "description": "", "address": "", "contact": "" }, "sliceId": "", "mobile_services": [], "traffic_categories": { "apps": { "os": "09078034-07db-4b13-a970-ab80235f7369", "apps": [] } }, "webhook": { "notificationUrl": "https://application-server.com", "notificationAuthToken": "c8974e592c2fa383d4a3960714" } }, "deviceStatus": "ATTACHED", "deviceAttachState": "Completed", "applicationAttachSuccessful": true } } }, "schema": { "properties": { "nac_resource_id": { "type": "string", "maxLength": 100, "title": "Nac Resource Id", "description": "Resource identifier of the attachment data." }, "resource": { "properties": { "device": { "properties": { "phoneNumber": { "type": "string", "maxLength": 16, "pattern": "^\\+[1-9][0-9]{4,14}$", "title": "Phonenumber", "description": "Phone number of the subscription, if any. Optional.", "nullable": true }, "networkAccessIdentifier": { "type": "string", "maxLength": 256, "pattern": "^\\S+@\\S+\\.\\S+$", "title": "Networkaccessidentifier", "description": "Email address-like external identifier of the subscription registered at the operator. If both networkAccessIdentifier and phoneNumber are included, phoneNumber may be dropped and networkAccessIdentifier may be retained.", "nullable": true }, "ipv4Address": { "allOf": [ { "properties": { "publicAddress": { "type": "string", "maxLength": 15, "title": "Publicaddress", "description": "Public IPv4 address of the device. Either of the device or the NAT the device is behind.", "nullable": true }, "privateAddress": { "type": "string", "maxLength": 15, "title": "Privateaddress", "description": "Private IPv4 address of the device, if it is behind a NAT.", "nullable": true }, "publicPort": { "type": "integer", "maximum": 65535, "minimum": 0, "format": "int32", "title": "Publicport", "description": "Public port used by the device. Port is necessary, as private address ranges overlap, and public port is used to extend the range for CGNAT.", "nullable": true } }, "type": "object", "title": "DeviceIpv4Addr" } ], "description": "IPv4 address of the device. IP address is needed for some flow-oriented services, such as QoD." }, "ipv6Address": { "type": "string", "maxLength": 45, "title": "Ipv6Address", "description": "IPv6 address of the device. IP address is needed for some flow-oriented services, such as QoD.", "nullable": true }, "imsi": { "type": "integer", "title": "Imsi", "description": "International mobile subscriber identity", "nullable": true } }, "type": "object", "title": "MobileSubscribersDevice" }, "customer": { "allOf": [ { "properties": { "name": { "type": "string", "maxLength": 250, "title": "Name" }, "description": { "type": "string", "maxLength": 100, "title": "Description", "description": "Description of the slice, e.g. \"B2B_5G_eMBB_Slice\"", "nullable": true }, "address": { "type": "string", "maxLength": 250, "title": "Address", "description": "Address of the customer ordering slice creation.", "nullable": true }, "contact": { "type": "string", "maxLength": 250, "title": "Contact", "description": "Contact of the customer ordering slice creation.", "nullable": true } }, "type": "object", "required": [ "name" ], "title": "Customer" } ], "description": "Customer who orders the device attach operations." }, "sliceId": { "type": "string", "maxLength": 64, "minLength": 5, "pattern": "^[a-zA-Z0-9][a-zA-Z0-9-]{3,63}[a-zA-Z0-9]$", "title": "Sliceid", "description": "Slice resource identifier, simple name or UUID." }, "mobile_services": { "items": { "type": "string" }, "type": "array", "maxItems": 10, "title": "Mobile Services", "description": "List of services allowed for the device.", "default": [ "Voice", "Voicemail", "5G-Data" ] }, "traffic_categories": { "allOf": [ { "properties": { "apps": { "properties": { "os": { "type": "string", "maxLength": 100, "title": "Os", "description": "Operating system identifier, UUID" }, "apps": { "items": { "type": "string", "maxLength": 50 }, "type": "array", "title": "Apps", "description": "List of application identifiers" } }, "type": "object", "required": [ "os", "apps" ], "title": "Apps" } }, "type": "object", "required": [ "apps" ], "title": "TrafficCategories" } ], "description": "Denotes the operating system id and the applications' identifiers" }, "webhook": { "allOf": [ { "properties": { "notificationUrl": { "type": "string", "maxLength": 256, "title": "Notificationurl", "description": "Notification URL for session-related events." }, "notificationAuthToken": { "type": "string", "maxLength": 4096, "title": "Notificationauthtoken", "description": "Authorization token for notification sending.", "nullable": true } }, "type": "object", "required": [ "notificationUrl" ], "title": "Webhook" } ], "description": "Callback settings for the requester application." } }, "type": "object", "required": [ "device", "sliceId" ], "title": "AttachResource" }, "deviceStatus": { "allOf": [ { "type": "string", "enum": [ "ATTACHED", "DETACHED" ], "title": "AttachStatus" } ], "description": "Status of the device in relation to the given slice e.g. ATTACHED or DETACHED." }, "deviceAttachState": { "allOf": [ { "type": "string", "enum": [ "Completed", "Accepted", "Rejected", "Acknowledged" ], "title": "OrderState" } ], "description": "Progress/state of the device attach order, e.g. Completed, Accepted, Rejected." }, "applicationAttachSuccessful": { "type": "boolean", "title": "Applicationattachsuccessful", "description": "Denotes whether successful application attach subscription was subsequently sent.", "nullable": true } }, "type": "object", "required": [ "nac_resource_id", "resource" ], "title": "AttachInfo" } } }, "description": "" }, "422": { "content": { "application/json": { "examples": { "Example_1": { "value": { "detail": [ { "loc": [], "msg": "", "type": "" } ] } } }, "schema": { "properties": { "detail": { "items": { "properties": { "loc": { "type": "array", "items": { "type": "string" }, "title": "Location" }, "msg": { "type": "string", "title": "Message" }, "type": { "type": "string", "title": "Error Type" } }, "type": "object", "required": [ "loc", "msg", "type" ], "title": "ValidationError" }, "type": "array", "title": "Detail" } }, "type": "object", "title": "HTTPValidationError" } } }, "description": "" } } }, "delete": { "tags": [ "Slice Device Attach v1.0.0" ], "summary": "Detach device from given slice.", "parameters": [ { "name": "resource_id", "in": "path", "required": true, "schema": { "type": "string", "maxLength": 36, "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$", "title": "Resource ID.", "default": "de87e438-58b4-42c3-9d49-0fbfbd878305" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "detachDevice", "description": "Detach device from a specific slice.", "responses": { "202": { "content": { "application/json": { "examples": { "Example_1": { "value": { "nac_resource_id": "", "resource": { "device": { "phoneNumber": "", "networkAccessIdentifier": "", "ipv4Address": { "publicAddress": "", "privateAddress": "", "publicPort": 0 }, "ipv6Address": "", "imsi": 0 }, "customer": { "name": "", "description": "", "address": "", "contact": "" }, "sliceId": "", "mobile_services": [], "traffic_categories": { "apps": { "os": "09078034-07db-4b13-a970-ab80235f7369", "apps": [] } }, "webhook": { "notificationUrl": "https://application-server.com", "notificationAuthToken": "c8974e592c2fa383d4a3960714" } }, "deviceStatus": "ATTACHED", "deviceAttachState": "Completed", "applicationAttachSuccessful": true } } }, "schema": { "allOf": [ { "properties": { "nac_resource_id": { "type": "string", "maxLength": 100, "title": "Nac Resource Id", "description": "Resource identifier of the attachment data." }, "resource": { "properties": { "device": { "properties": { "phoneNumber": { "type": "string", "maxLength": 16, "pattern": "^\\+[1-9][0-9]{4,14}$", "title": "Phonenumber", "description": "Phone number of the subscription, if any. Optional.", "nullable": true }, "networkAccessIdentifier": { "type": "string", "maxLength": 256, "pattern": "^\\S+@\\S+\\.\\S+$", "title": "Networkaccessidentifier", "description": "Email address-like external identifier of the subscription registered at the operator. If both networkAccessIdentifier and phoneNumber are included, phoneNumber may be dropped and networkAccessIdentifier may be retained.", "nullable": true }, "ipv4Address": { "allOf": [ { "properties": { "publicAddress": { "type": "string", "maxLength": 15, "title": "Publicaddress", "description": "Public IPv4 address of the device. Either of the device or the NAT the device is behind.", "nullable": true }, "privateAddress": { "type": "string", "maxLength": 15, "title": "Privateaddress", "description": "Private IPv4 address of the device, if it is behind a NAT.", "nullable": true }, "publicPort": { "type": "integer", "maximum": 65535, "minimum": 0, "format": "int32", "title": "Publicport", "description": "Public port used by the device. Port is necessary, as private address ranges overlap, and public port is used to extend the range for CGNAT.", "nullable": true } }, "type": "object", "title": "DeviceIpv4Addr" } ], "description": "IPv4 address of the device. IP address is needed for some flow-oriented services, such as QoD." }, "ipv6Address": { "type": "string", "maxLength": 45, "title": "Ipv6Address", "description": "IPv6 address of the device. IP address is needed for some flow-oriented services, such as QoD.", "nullable": true }, "imsi": { "type": "integer", "title": "Imsi", "description": "International mobile subscriber identity", "nullable": true } }, "type": "object", "title": "MobileSubscribersDevice" }, "customer": { "allOf": [ { "properties": { "name": { "type": "string", "maxLength": 250, "title": "Name" }, "description": { "type": "string", "maxLength": 100, "title": "Description", "description": "Description of the slice, e.g. \"B2B_5G_eMBB_Slice\"", "nullable": true }, "address": { "type": "string", "maxLength": 250, "title": "Address", "description": "Address of the customer ordering slice creation.", "nullable": true }, "contact": { "type": "string", "maxLength": 250, "title": "Contact", "description": "Contact of the customer ordering slice creation.", "nullable": true } }, "type": "object", "required": [ "name" ], "title": "Customer" } ], "description": "Customer who orders the device attach operations." }, "sliceId": { "type": "string", "maxLength": 64, "minLength": 5, "pattern": "^[a-zA-Z0-9][a-zA-Z0-9-]{3,63}[a-zA-Z0-9]$", "title": "Sliceid", "description": "Slice resource identifier, simple name or UUID." }, "mobile_services": { "items": { "type": "string" }, "type": "array", "maxItems": 10, "title": "Mobile Services", "description": "List of services allowed for the device.", "default": [ "Voice", "Voicemail", "5G-Data" ] }, "traffic_categories": { "allOf": [ { "properties": { "apps": { "properties": { "os": { "type": "string", "maxLength": 100, "title": "Os", "description": "Operating system identifier, UUID" }, "apps": { "items": { "type": "string", "maxLength": 50 }, "type": "array", "title": "Apps", "description": "List of application identifiers" } }, "type": "object", "required": [ "os", "apps" ], "title": "Apps" } }, "type": "object", "required": [ "apps" ], "title": "TrafficCategories" } ], "description": "Denotes the operating system id and the applications' identifiers" }, "webhook": { "allOf": [ { "properties": { "notificationUrl": { "type": "string", "maxLength": 256, "title": "Notificationurl", "description": "Notification URL for session-related events." }, "notificationAuthToken": { "type": "string", "maxLength": 4096, "title": "Notificationauthtoken", "description": "Authorization token for notification sending.", "nullable": true } }, "type": "object", "required": [ "notificationUrl" ], "title": "Webhook" } ], "description": "Callback settings for the requester application." } }, "type": "object", "required": [ "device", "sliceId" ], "title": "AttachResource" }, "deviceStatus": { "allOf": [ { "type": "string", "enum": [ "ATTACHED", "DETACHED" ], "title": "AttachStatus" } ], "description": "Status of the device in relation to the given slice e.g. ATTACHED or DETACHED." }, "deviceAttachState": { "allOf": [ { "type": "string", "enum": [ "Completed", "Accepted", "Rejected", "Acknowledged" ], "title": "OrderState" } ], "description": "Progress/state of the device attach order, e.g. Completed, Accepted, Rejected." }, "applicationAttachSuccessful": { "type": "boolean", "title": "Applicationattachsuccessful", "description": "Denotes whether successful application attach subscription was subsequently sent.", "nullable": true } }, "type": "object", "required": [ "nac_resource_id", "resource" ], "title": "AttachInfo" } ], "title": "Response Detachdevice" } } }, "description": "" }, "422": { "content": { "application/json": { "examples": { "Example_1": { "value": { "detail": [ { "loc": [], "msg": "", "type": "" } ] } } }, "schema": { "properties": { "detail": { "items": { "properties": { "loc": { "type": "array", "items": { "type": "string" }, "title": "Location" }, "msg": { "type": "string", "title": "Message" }, "type": { "type": "string", "title": "Error Type" } }, "type": "object", "required": [ "loc", "msg", "type" ], "title": "ValidationError" }, "type": "array", "title": "Detail" } }, "type": "object", "title": "HTTPValidationError" } } }, "description": "" } } } }, "/quality-on-demand/v1/sessions": { "post": { "tags": [ "Quality-of-Service on Demand v1.0.0" ], "summary": "Creates a new session", "operationId": "createSession-QoD-V1", "description": "Create QoS Session to manage latency/throughput priorities\n\nIf the qosStatus in the API response is \"AVAILABLE\" and a notification callback is provided the API consumer will receive in addition to the response a\n`QOS_STATUS_CHANGED` event notification with `qosStatus` as `AVAILABLE`.\n\nIf the `qosStatus` in the API response is `REQUESTED`, the client will receive either\n- a `QOS_STATUS_CHANGED` event notification with `qosStatus` as `AVAILABLE` after the network notifies that it has created the requested session, or\n- a `QOS_STATUS_CHANGED` event notification with `qosStatus` as `UNAVAILABLE` and `statusInfo` as `NETWORK_TERMINATED` after the network notifies that it has failed to provide the requested session.\n\nA `QOS_STATUS_CHANGED` event notification with `qosStatus` as `UNAVAILABLE` will also be send if the network terminates the session before the requested duration expired\n\nNOTE: in case of a `QOS_STATUS_CHANGED` event with `qosStatus` as `UNAVAILABLE` and `statusInfo` as `NETWORK_TERMINATED` the resources of the QoS session\nare not directly released, but will get deleted automatically at earliest 360 seconds after the event.\nThis behavior allows clients which are not receiving notification events but are polling to get the session information with\nthe `qosStatus` `UNAVAILABLE` (the `statusInfo` parameter is not included in the current version but will be adding to `SessionInfo` in an upcoming release). Before a client can attempt to create a new QoD session\nfor the same device and flow period they must release the session resources with an explicit `delete` operation if not yet automatically deleted.\n", "responses": { "201": { "content": { "application/json": { "examples": { "Example_1": { "value": { "device": { "phoneNumber": "+123456789", "networkAccessIdentifier": "123456789@domain.com", "ipv4Address": { "publicAddress": "84.125.93.10", "privateAddress": "84.125.93.10", "publicPort": 0 }, "ipv6Address": "2001:db8:85a3:8d3:1319:8a2e:370:7344" }, "applicationServer": { "ipv4Address": "192.168.0.1/24", "ipv6Address": "2001:db8:85a3:8d3:1319:8a2e:370:7344" }, "devicePorts": { "ranges": [ { "from": 0, "to": 0 } ], "ports": [] }, "applicationServerPorts": { "ranges": [ { "from": 0, "to": 0 } ], "ports": [] }, "qosProfile": "QCI_1_voice", "sink": "https://endpoint.example.com/sink", "sinkCredential": { "credentialType": "ACCESSTOKEN" }, "sessionId": "", "duration": 86400, "startedAt": "2024-06-01T12:00:00Z", "expiresAt": "2024-06-01T13:00:00Z", "qosStatus": "REQUESTED", "statusInfo": "DURATION_EXPIRED", "messages": [ { "severity": "INFO", "description": "" } ] } } }, "schema": { "description": "Session related information.", "allOf": [ { "description": "Common attributes of a QoD session", "type": "object", "properties": { "device": { "description": "End-user equipment able to connect to a network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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\n", "type": "object", "properties": { "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": "^\\+?[0-9]{5,15}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n\nThe session shall apply to all IP flows between the device subnet and the specified application server, unless further restricted by the optional parameters devicePorts or applicationServerPorts.\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 }, "applicationServer": { "description": "A server hosting backend applications to deliver some business logic to clients.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n", "type": "object", "properties": { "ipv4Address": { "type": "string", "description": "IPv4 address may be specified in form
as:\n - address - an IPv4 number in dotted-quad form 1.2.3.4. Only this exact IP number will match the flow control rule.\n - address/mask - an IP number as above with a mask width of the form 1.2.3.4/24.\n In this case, all IP numbers from 1.2.3.0 to 1.2.3.255 will match. The bit width MUST be valid for the IP version.\n" }, "ipv6Address": { "type": "string", "description": "IPv6 address may be specified in form
as:\n - address - The /128 subnet is optional for single addresses:\n - 2001:db8:85a3:8d3:1319:8a2e:370:7344\n - 2001:db8:85a3:8d3:1319:8a2e:370:7344/128\n - address/mask - an IP v6 number with a mask:\n - 2001:db8:85a3:8d3::0/64\n - 2001:db8:85a3:8d3::/64\n" } }, "minProperties": 1 }, "devicePorts": { "description": "The ports used locally by the device for flows to which the requested QoS profile should apply. If omitted, then the qosProfile will apply to all flows between the device and the specified application server address and ports", "allOf": [ { "type": "object", "minProperties": 1, "properties": { "ranges": { "type": "array", "minItems": 1, "items": { "type": "object", "required": [ "from", "to" ], "properties": { "from": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 }, "to": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } }, "ports": { "type": "array", "minItems": 1, "items": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } } ] }, "applicationServerPorts": { "description": "A list of single ports or port ranges on the application server", "allOf": [ { "type": "object", "minProperties": 1, "properties": { "ranges": { "type": "array", "minItems": 1, "items": { "type": "object", "required": [ "from", "to" ], "properties": { "from": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 }, "to": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } }, "ports": { "type": "array", "minItems": 1, "items": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } } ] }, "qosProfile": { "description": "A unique name for identifying a specific QoS profile.\nThis may follow different formats depending on the service providers implementation.\nSome options addresses:\n\n\n\n\n\n - A UUID style string\n - Support for predefined profiles QOS_S, QOS_M, QOS_L, and QOS_E\n - A searchable descriptive name\n", "type": "string", "minLength": 3, "maxLength": 256, "format": "string", "pattern": "^[a-zA-Z0-9_.-]+$" }, "sink": { "type": "string", "format": "uri", "description": "The address to which events about all status changes of the session (e.g. session termination) shall be delivered using the selected protocol." }, "sinkCredential": { "description": "A sink credential provides authentication or authorization information necessary to enable delivery of events to a target.", "allOf": [ { "type": "object", "properties": { "credentialType": { "type": "string", "enum": [ "ACCESSTOKEN" ], "description": "The type of the credential.\nNote: Type of the credential - MUST be set to ACCESSTOKEN for now\n" } }, "required": [ "credentialType" ] } ] } }, "required": [ "applicationServer", "qosProfile" ] }, { "type": "object", "properties": { "sessionId": { "description": "Session ID in UUID format", "type": "string", "format": "uuid" }, "duration": { "type": "integer", "format": "int32", "minimum": 1, "maximum": 2147483647 }, "startedAt": { "description": "Date and time when the QoS status became \"AVAILABLE\". Not to be returned when `qosStatus` is \"REQUESTED\". Format must follow RFC 3339 and must indicate time zone (UTC or local).", "type": "string", "format": "date-time" }, "expiresAt": { "description": "Date and time of the QoS session expiration. Format must follow RFC 3339 and must indicate time zone (UTC or local).\n- When `qosStatus` is \"AVAILABLE\", it is the limit time when the session is scheduled to finnish, if not terminated by other means.\n- When `qosStatus` is \"UNAVAILABLE\", it is the time when the session was terminated.\n- Not to be returned when `qosStatus` is \"REQUESTED\".\nWhen the session is extended, the value is the new expiration time of the session.\n", "type": "string", "format": "date-time" }, "qosStatus": { "description": "The current status of the requested QoS session. The status can be one of the following:\n* `REQUESTED` - QoS has been requested by creating a session\n* `AVAILABLE` - The requested QoS has been provided by the network\n* `UNAVAILABLE` - The requested QoS cannot be provided by the network due to some reason\n", "type": "string", "enum": [ "REQUESTED", "AVAILABLE", "UNAVAILABLE" ] }, "statusInfo": { "description": "Reason for the new `qosStatus`. Currently `statusInfo` is only applicable when `qosStatus` is 'UNAVAILABLE'.\n* `DURATION_EXPIRED` - Session terminated due to requested duration expired\n* `NETWORK_TERMINATED` - Network terminated the session before the requested duration expired\n* `DELETE_REQUESTED`- User requested the deletion of the session before the requested duration expired\n", "type": "string", "enum": [ "DURATION_EXPIRED", "NETWORK_TERMINATED", "DELETE_REQUESTED" ] }, "messages": { "type": "array", "items": { "type": "object", "properties": { "severity": { "description": "Message severity", "type": "string", "enum": [ "INFO", "WARNING" ] }, "description": { "description": "Detailed message text", "type": "string" } }, "required": [ "severity", "description" ] } } }, "required": [ "sessionId", "duration", "qosStatus" ] } ] } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "GENERIC_400_INVALID_TOKEN": { "value": { "status": 400, "code": "INVALID_TOKEN", "message": "Only bearer token is supported" } }, "DurationOutOfRangeForQoSProfile": { "description": "The requested duration is out of the allowed range for the specific QoS profile", "value": { "status": 400, "code": "QUALITY_ON_DEMAND.DURATION_OUT_OF_RANGE", "message": "The requested duration is out of the allowed range for the specific QoS profile" } }, "GENERIC_400_INVALID_ARGUMENT": { "description": "Invalid Argument. Generic Syntax Exception", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param." } }, "GENERIC_400_OUT_OF_RANGE": { "description": "Out of Range. Specific Syntax Exception used when a given field has a pre-defined range or a invalid filter criteria combination is requested", "value": { "status": 400, "code": "OUT_OF_RANGE", "message": "Client specified an invalid range." } }, "GENERIC_400_INVALID_CREDENTIAL": { "value": { "status": 400, "code": "INVALID_CREDENTIAL", "message": "Only Access token is supported" } } }, "schema": { "allOf": [ { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] }, { "type": "object", "properties": { "status": { "enum": [ 400 ] }, "code": { "enum": [ "INVALID_ARGUMENT", "OUT_OF_RANGE", "QUALITY_ON_DEMAND.DURATION_OUT_OF_RANGE", "INVALID_CREDENTIAL", "INVALID_TOKEN" ] } } } ] } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Authorization failed: ..." } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Operation not allowed: ..." } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "409": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 409, "code": "CONFLICT", "message": "Another session is created for the same device" } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "500": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 500, "code": "INTERNAL", "message": "Internal server error: ..." } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "501": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 501, "code": "NOT_IMPLEMENTED", "message": "Service not implemented for the specified user device" } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "503": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 503, "code": "UNAVAILABLE", "message": "Service unavailable" } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "QOS_STATUS_AVAILABLE_NO_INFO_PHONE_NUMBER": { "value": { "device": { "phoneNumber": "+99999991001", "ipv4Address": { "publicAddress": "233.252.0.2", "privateAddress": "192.0.2.25", "publicPort": 80 } }, "applicationServer": { "ipv4Address": "8.8.8.8" }, "qosProfile": "DOWNLINK_M_UPLINK_L", "duration": 60 } } }, "schema": { "description": "Attributes required to create a session", "allOf": [ { "description": "Common attributes of a QoD session", "type": "object", "properties": { "device": { "description": "End-user equipment able to connect to a network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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\n", "type": "object", "properties": { "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": "^\\+?[0-9]{5,15}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n\nThe session shall apply to all IP flows between the device subnet and the specified application server, unless further restricted by the optional parameters devicePorts or applicationServerPorts.\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 }, "applicationServer": { "description": "A server hosting backend applications to deliver some business logic to clients.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n", "type": "object", "properties": { "ipv4Address": { "type": "string", "description": "IPv4 address may be specified in form
as:\n - address - an IPv4 number in dotted-quad form 1.2.3.4. Only this exact IP number will match the flow control rule.\n - address/mask - an IP number as above with a mask width of the form 1.2.3.4/24.\n In this case, all IP numbers from 1.2.3.0 to 1.2.3.255 will match. The bit width MUST be valid for the IP version.\n" }, "ipv6Address": { "type": "string", "description": "IPv6 address may be specified in form
as:\n - address - The /128 subnet is optional for single addresses:\n - 2001:db8:85a3:8d3:1319:8a2e:370:7344\n - 2001:db8:85a3:8d3:1319:8a2e:370:7344/128\n - address/mask - an IP v6 number with a mask:\n - 2001:db8:85a3:8d3::0/64\n - 2001:db8:85a3:8d3::/64\n" } }, "minProperties": 1 }, "devicePorts": { "description": "The ports used locally by the device for flows to which the requested QoS profile should apply. If omitted, then the qosProfile will apply to all flows between the device and the specified application server address and ports", "allOf": [ { "type": "object", "minProperties": 1, "properties": { "ranges": { "type": "array", "minItems": 1, "items": { "type": "object", "required": [ "from", "to" ], "properties": { "from": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 }, "to": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } }, "ports": { "type": "array", "minItems": 1, "items": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } } ] }, "applicationServerPorts": { "description": "A list of single ports or port ranges on the application server", "allOf": [ { "type": "object", "minProperties": 1, "properties": { "ranges": { "type": "array", "minItems": 1, "items": { "type": "object", "required": [ "from", "to" ], "properties": { "from": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 }, "to": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } }, "ports": { "type": "array", "minItems": 1, "items": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } } ] }, "qosProfile": { "description": "A unique name for identifying a specific QoS profile.\nThis may follow different formats depending on the service providers implementation.\nSome options addresses:\n\n\n\n\n\n - A UUID style string\n - Support for predefined profiles QOS_S, QOS_M, QOS_L, and QOS_E\n - A searchable descriptive name\n", "type": "string", "minLength": 3, "maxLength": 256, "format": "string", "pattern": "^[a-zA-Z0-9_.-]+$" }, "sink": { "type": "string", "format": "uri", "description": "The address to which events about all status changes of the session (e.g. session termination) shall be delivered using the selected protocol." }, "sinkCredential": { "description": "A sink credential provides authentication or authorization information necessary to enable delivery of events to a target.", "allOf": [ { "type": "object", "properties": { "credentialType": { "type": "string", "enum": [ "ACCESSTOKEN" ], "description": "The type of the credential.\nNote: Type of the credential - MUST be set to ACCESSTOKEN for now\n" } }, "required": [ "credentialType" ] } ] } }, "required": [ "applicationServer", "qosProfile" ] }, { "type": "object", "properties": { "duration": { "description": "Session duration in seconds. Maximal value of 24 hours is used if not set.\nAfter session is expired the, client will receive a `QOS_STATUS_CHANGED` event with\n- `qosStatus` as `UNAVAILABLE`, and,\n- `statusInfo` as `DURATION_EXPIRED`.\nSee notification callback.\n", "type": "integer", "format": "int32", "minimum": 1, "maximum": 86400, "default": 86400 } } } ] } } }, "description": "" }, "parameters": [ { "$ref": "#/components/parameters/x-rapidapi-host" } ] } }, "/qod/v0/sessions": { "post": { "tags": [ "Quality-of-Service on Demand v0.10.1" ], "summary": "Creates a new session", "operationId": "createSession", "description": "Create QoS Session to manage latency/throughput priorities\n\nIf the qosStatus in the API response is \"AVAILABLE\" and a notification callback is provided the client will receive in addition to the response a\n`QOS_STATUS_CHANGED` event notification with `qosStatus` as `AVAILABLE`.\n\nIf the `qosStatus` in the API response is `REQUESTED`, the client will receive either\n- a `QOS_STATUS_CHANGED` event notification with `qosStatus` as `AVAILABLE` after the network notifies that it has created the requested session, or\n- a `QOS_STATUS_CHANGED` event notification with `qosStatus` as `UNAVAILABLE` and `statusInfo` as `NETWORK_TERMINATED` after the network notifies that it has failed to provide the requested session.\n\nA `QOS_STATUS_CHANGED` event notification with `qosStatus` as `UNAVAILABLE` will also be send if the network terminates the session before the requested duration expired\n\nNOTE: in case of a `QOS_STATUS_CHANGED` event with `qosStatus` as `UNAVAILABLE` and `statusInfo` as `NETWORK_TERMINATED` the resources of the QoS session\nare not directly released, but will get deleted automatically at earliest 360 seconds after the event.\nThis behavior allows clients which are not receiving notification events but are polling to get the session information with\nthe `qosStatus` `UNAVAILABLE` (the `statusInfo` parameter is not included in the current version but will be adding to `SessionInfo` in an upcoming release). Before a client can attempt to create a new QoD session\nfor the same device and flow period they must release the session resources with an explicit `delete` operation if not yet automatically deleted.\n", "responses": { "201": { "content": { "application/json": { "examples": { "Example_1": { "value": { "device": { "phoneNumber": "123456789", "networkAccessIdentifier": "123456789@domain.com", "ipv4Address": { "publicAddress": "84.125.93.10", "privateAddress": "84.125.93.10", "publicPort": 0 }, "ipv6Address": "2001:db8:85a3:8d3:1319:8a2e:370:7344" }, "applicationServer": { "ipv4Address": "192.168.0.1/24", "ipv6Address": "2001:db8:85a3:8d3:1319:8a2e:370:7344" }, "devicePorts": { "ranges": [ { "from": 0, "to": 0 } ], "ports": [] }, "applicationServerPorts": { "ranges": [ { "from": 0, "to": 0 } ], "ports": [] }, "qosProfile": "QCI_1_voice", "webhook": { "notificationUrl": "https://application-server.com", "notificationAuthToken": "c8974e592c2fa383d4a3960714" }, "sessionId": "", "duration": 86400, "startedAt": 1639479600, "expiresAt": 1639566000, "qosStatus": "REQUESTED", "messages": [ { "severity": "INFO", "description": "" } ] } } }, "schema": { "description": "Session related information.", "allOf": [ { "description": "Common attributes of a QoD session", "type": "object", "properties": { "device": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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\n", "type": "object", "properties": { "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, optionally prefixed with '+'.", "type": "string", "pattern": "^\\+?[0-9]{5,15}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n\nThe session shall apply to all IP flows between the device subnet and the specified application server, unless further restricted by the optional parameters devicePorts or applicationServerPorts.\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 }, "applicationServer": { "description": "A server hosting backend applications to deliver some business logic to clients.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n", "type": "object", "properties": { "ipv4Address": { "type": "string", "description": "IPv4 address may be specified in form
as:\n - address - an IPv4 number in dotted-quad form 1.2.3.4. Only this exact IP number will match the flow control rule.\n - address/mask - an IP number as above with a mask width of the form 1.2.3.4/24.\n In this case, all IP numbers from 1.2.3.0 to 1.2.3.255 will match. The bit width MUST be valid for the IP version.\n" }, "ipv6Address": { "type": "string", "description": "IPv6 address may be specified in form
as:\n - address - The /128 subnet is optional for single addresses:\n - 2001:db8:85a3:8d3:1319:8a2e:370:7344\n - 2001:db8:85a3:8d3:1319:8a2e:370:7344/128\n - address/mask - an IP v6 number with a mask:\n - 2001:db8:85a3:8d3::0/64\n - 2001:db8:85a3:8d3::/64\n" } }, "minProperties": 1 }, "devicePorts": { "description": "The ports used locally by the device for flows to which the requested QoS profile should apply. If omitted, then the qosProfile will apply to all flows between the device and the specified application server address and ports", "allOf": [ { "type": "object", "minProperties": 1, "properties": { "ranges": { "type": "array", "minItems": 1, "items": { "type": "object", "required": [ "from", "to" ], "properties": { "from": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 }, "to": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } }, "ports": { "type": "array", "minItems": 1, "items": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } } ] }, "applicationServerPorts": { "description": "A list of single ports or port ranges on the application server", "allOf": [ { "type": "object", "minProperties": 1, "properties": { "ranges": { "type": "array", "minItems": 1, "items": { "type": "object", "required": [ "from", "to" ], "properties": { "from": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 }, "to": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } }, "ports": { "type": "array", "minItems": 1, "items": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } } ] }, "qosProfile": { "description": "A unique name for identifying a specific QoS profile.\nThis may follow different formats depending on the service providers implementation.\nSome options addresses:\n\n\n\n\n\n - A UUID style string\n - Support for predefined profiles QOS_S, QOS_M, QOS_L, and QOS_E\n - A searchable descriptive name\n", "type": "string", "minLength": 3, "maxLength": 256, "format": "string", "pattern": "^[a-zA-Z0-9_.-]+$" }, "webhook": { "type": "object", "required": [ "notificationUrl" ], "properties": { "notificationUrl": { "type": "string", "format": "uri", "description": "Allows asynchronous delivery of session related events" }, "notificationAuthToken": { "type": "string", "minLength": 20, "maxLength": 256, "description": "Authentication token for callback API" } } } }, "required": [ "device", "applicationServer", "qosProfile" ] }, { "type": "object", "properties": { "sessionId": { "description": "Session ID in UUID format", "type": "string", "format": "uuid" }, "duration": { "type": "integer", "format": "int32", "minimum": 1, "maximum": 2147483647 }, "startedAt": { "type": "integer", "description": "Timestamp of session start in seconds since Unix epoch", "format": "int64", "minimum": -9223372036854776000, "maximum": 9223372036854776000 }, "expiresAt": { "type": "integer", "description": "Timestamp of session expiration if the session was not deleted, in seconds since Unix epoch", "format": "int64", "minimum": -9223372036854776000, "maximum": 9223372036854776000 }, "qosStatus": { "description": "The current status of the requested QoS session. The status can be one of the following:\n* `REQUESTED` - QoS has been requested by creating a session\n* `AVAILABLE` - The requested QoS has been provided by the network\n* `UNAVAILABLE` - The requested QoS cannot be provided by the network due to some reason\n", "type": "string", "enum": [ "REQUESTED", "AVAILABLE", "UNAVAILABLE" ] }, "messages": { "type": "array", "items": { "type": "object", "properties": { "severity": { "description": "Message severity", "type": "string", "enum": [ "INFO", "WARNING" ] }, "description": { "description": "Detailed message text", "type": "string" } }, "required": [ "severity", "description" ] } } }, "required": [ "sessionId", "duration", "startedAt", "expiresAt", "qosStatus" ] } ] } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "InvalidDevicePortsRanges": { "value": { "status": 400, "code": "OUT_OF_RANGE", "message": "Invalid port ranges specified: devicePorts" } }, "QoSProfileMissing": { "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Expected property is missing: qosProfile" } }, "DeviceMissing": { "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Expected property is missing: device" } }, "InsufficientDeviceProperties": { "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Insufficient properties specified: device" } }, "ApplicationServerMissing": { "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Expected property is missing: applicationServer" } }, "Generic400": { "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Schema validation failed at ..." } }, "CannotIdentifyDevice": { "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Unable to identify device from specified parameters: device" } }, "InvalidDevicePublicPortValue": { "value": { "status": 400, "code": "OUT_OF_RANGE", "message": "Invalid port value specified: device.ipv4Address.publicPort" } }, "InconsistentDeviceProperties": { "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Multiple inconsistent parameters specified: device" } }, "DurationOutOfRangeForQoSProfile": { "value": { "status": 400, "code": "OUT_OF_RANGE", "message": "The requested duration is out of the allowed range for the specific QoS profile" } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Authorization failed: ..." } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Operation not allowed: ..." } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "409": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 409, "code": "CONFLICT", "message": "Another session is created for the same device" } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "500": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 500, "code": "INTERNAL", "message": "Internal server error: ..." } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "501": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 501, "code": "NOT_IMPLEMENTED", "message": "Service not implemented for the specified user device" } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "503": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 503, "code": "UNAVAILABLE", "message": "Service unavailable" } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "QOS_STATUS_AVAILABLE_NO_INFO_PHONE_NUMBER": { "value": { "device": { "phoneNumber": "+99999991001", "ipv4Address": { "publicAddress": "233.252.0.2", "privateAddress": "192.0.2.25", "publicPort": 80 } }, "applicationServer": { "ipv4Address": "8.8.8.8" }, "qosProfile": "DOWNLINK_M_UPLINK_L", "duration": 60 } } }, "schema": { "description": "Attributes required to create a session", "allOf": [ { "description": "Common attributes of a QoD session", "type": "object", "properties": { "device": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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\n", "type": "object", "properties": { "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, optionally prefixed with '+'.", "type": "string", "pattern": "^\\+?[0-9]{5,15}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n\nThe session shall apply to all IP flows between the device subnet and the specified application server, unless further restricted by the optional parameters devicePorts or applicationServerPorts.\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 }, "applicationServer": { "description": "A server hosting backend applications to deliver some business logic to clients.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n", "type": "object", "properties": { "ipv4Address": { "type": "string", "description": "IPv4 address may be specified in form
as:\n - address - an IPv4 number in dotted-quad form 1.2.3.4. Only this exact IP number will match the flow control rule.\n - address/mask - an IP number as above with a mask width of the form 1.2.3.4/24.\n In this case, all IP numbers from 1.2.3.0 to 1.2.3.255 will match. The bit width MUST be valid for the IP version.\n" }, "ipv6Address": { "type": "string", "description": "IPv6 address may be specified in form
as:\n - address - The /128 subnet is optional for single addresses:\n - 2001:db8:85a3:8d3:1319:8a2e:370:7344\n - 2001:db8:85a3:8d3:1319:8a2e:370:7344/128\n - address/mask - an IP v6 number with a mask:\n - 2001:db8:85a3:8d3::0/64\n - 2001:db8:85a3:8d3::/64\n" } }, "minProperties": 1 }, "devicePorts": { "description": "The ports used locally by the device for flows to which the requested QoS profile should apply. If omitted, then the qosProfile will apply to all flows between the device and the specified application server address and ports", "allOf": [ { "type": "object", "minProperties": 1, "properties": { "ranges": { "type": "array", "minItems": 1, "items": { "type": "object", "required": [ "from", "to" ], "properties": { "from": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 }, "to": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } }, "ports": { "type": "array", "minItems": 1, "items": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } } ] }, "applicationServerPorts": { "description": "A list of single ports or port ranges on the application server", "allOf": [ { "type": "object", "minProperties": 1, "properties": { "ranges": { "type": "array", "minItems": 1, "items": { "type": "object", "required": [ "from", "to" ], "properties": { "from": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 }, "to": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } }, "ports": { "type": "array", "minItems": 1, "items": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } } ] }, "qosProfile": { "description": "A unique name for identifying a specific QoS profile.\nThis may follow different formats depending on the service providers implementation.\nSome options addresses:\n\n\n\n\n\n - A UUID style string\n - Support for predefined profiles QOS_S, QOS_M, QOS_L, and QOS_E\n - A searchable descriptive name\n", "type": "string", "minLength": 3, "maxLength": 256, "format": "string", "pattern": "^[a-zA-Z0-9_.-]+$" }, "webhook": { "type": "object", "required": [ "notificationUrl" ], "properties": { "notificationUrl": { "type": "string", "format": "uri", "description": "Allows asynchronous delivery of session related events" }, "notificationAuthToken": { "type": "string", "minLength": 20, "maxLength": 256, "description": "Authentication token for callback API" } } } }, "required": [ "device", "applicationServer", "qosProfile" ] }, { "type": "object", "properties": { "duration": { "description": "Session duration in seconds. Maximal value of 24 hours is used if not set.\nAfter session is expired the, client will receive a `QOS_STATUS_CHANGED` event with\n- `qosStatus` as `UNAVAILABLE`, and,\n- `statusInfo` as `DURATION_EXPIRED`.\nSee notification callback.\n", "type": "integer", "format": "int32", "minimum": 1, "maximum": 86400, "default": 86400 } } } ] } } }, "description": "" }, "parameters": [ { "$ref": "#/components/parameters/x-rapidapi-host" } ] } }, "/device-status/device-reachability-status/v1/retrieve": { "post": { "tags": [ "Device Reachability Status Retrieve v1.1.0" ], "summary": "Get the current reachability status information", "parameters": [ { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": {} }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "getReachabilityStatus", "description": "Get the current reachability status information", "responses": { "200": { "content": { "application/json": { "examples": { "Reachable Using SMS": { "value": { "lastStatusTime": "2024-02-20T10:41:38.657Z", "reachable": true, "connectivity": [ "SMS" ] } }, "Reachable Using Data": { "value": { "lastStatusTime": "2024-02-20T10:41:38.657Z", "reachable": true, "connectivity": [ "DATA" ] } }, "Not Reachable Over The Mobile Network": { "value": { "lastStatusTime": "2024-02-20T10:41:38.657Z", "reachable": false } }, "Reachable Using SMS With Device Disambguation": { "value": { "device": { "phoneNumber": "+99999991000" }, "lastStatusTime": "2024-02-20T10:41:38.657Z", "reachable": true, "connectivity": [ "SMS" ] } }, "Reachable Using Data and SMS": { "value": { "lastStatusTime": "2024-02-20T10:41:38.657Z", "reachable": true, "connectivity": [ "DATA", "SMS" ] } } }, "schema": { "type": "object", "required": [ "lastStatusTime", "reachable" ], "properties": { "device": { "description": "An identifier for the end-user equipment able to connect to the network that the response refers to. This parameter is only returned when the API consumer includes the `device` parameter in their request (i.e. they are using a two-legged access token), and is relevant when more than one device identifier is specified, as only one of those device identifiers is allowed in the response.\n\nIf the API consumer provides more than one device identifier in their request, the API provider must return a single identifier which is the one they are using to fulfil the request, even if the identifiers do not match the same device. API provider does not perform any logic to validate/correlate that the indicated device identifiers match the same device. No error should be returned if the identifiers are otherwise valid to prevent API consumers correlating different identifiers with a given end user.\n", "allOf": [ { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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.\n", "type": "object", "properties": { "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}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 }, { "maxProperties": 1 } ] }, "lastStatusTime": { "description": "Last time that the associated device reachability status was updated.\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\nRecommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)\n", "type": "string", "format": "date-time" }, "reachable": { "description": "Indicates overall device reachability", "type": "boolean" }, "connectivity": { "type": "array", "items": { "description": "DATA: The device is connected to the network for Data usage (regardless of the SMS reachability)\n\nSMS: The device is connected to the network only for SMS usage\n", "type": "string", "enum": [ "DATA", "SMS" ] } } } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "GENERIC_400_INVALID_ARGUMENT": { "description": "Invalid Argument. Generic Syntax Exception", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 400 ] }, "code": { "enum": [ "INVALID_ARGUMENT" ] } } } ] } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "GENERIC_401_UNAUTHENTICATED": { "description": "Request cannot be authenticated and a new authentication is required", "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials. A new authentication is required." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 401 ] }, "code": { "enum": [ "UNAUTHENTICATED" ] } } } ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "GENERIC_403_PERMISSION_DENIED": { "description": "Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security", "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 403 ] }, "code": { "enum": [ "PERMISSION_DENIED" ] } } } ] } } }, "description": "" }, "404": { "content": { "application/json": { "examples": { "GENERIC_404_IDENTIFIER_NOT_FOUND": { "description": "The phone number is not associated with a CSP customer account", "value": { "status": 404, "code": "IDENTIFIER_NOT_FOUND", "message": "The phone number provided is not associated with a customer account" } }, "GENERIC_404_NOT_FOUND": { "description": "Resource is not found", "value": { "status": 404, "code": "NOT_FOUND", "message": "The specified resource is not found." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 404 ] }, "code": { "enum": [ "NOT_FOUND", "IDENTIFIER_NOT_FOUND" ] } } } ] } } }, "description": "" }, "422": { "content": { "application/json": { "examples": { "GENERIC_422_UNSUPPORTED_IDENTIFIER": { "description": "None of the provided identifiers is supported by the implementation", "value": { "status": 422, "code": "UNSUPPORTED_IDENTIFIER", "message": "The identifier provided is not supported." } }, "GENERIC_422_UNNECESSARY_IDENTIFIER": { "description": "An explicit identifier is provided when a device or phone number has already been identified from the access token", "value": { "status": 422, "code": "UNNECESSARY_IDENTIFIER", "message": "The device is already identified by the access token." } }, "GENERIC_422_SERVICE_NOT_APPLICABLE": { "description": "Service not applicable for the provided identifier", "value": { "status": 422, "code": "SERVICE_NOT_APPLICABLE", "message": "The service is not available for the provided identifier." } }, "GENERIC_422_MISSING_IDENTIFIER": { "description": "An identifier is not included in the request and the device or phone number identification cannot be derived from the 3-legged access token", "value": { "status": 422, "code": "MISSING_IDENTIFIER", "message": "The device cannot be identified." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 422 ] }, "code": { "enum": [ "SERVICE_NOT_APPLICABLE", "MISSING_IDENTIFIER", "UNSUPPORTED_IDENTIFIER", "UNNECESSARY_IDENTIFIER" ] } } } ] } } }, "description": "" }, "429": { "content": { "application/json": { "examples": { "GENERIC_429_QUOTA_EXCEEDED": { "description": "Request is rejected due to exceeding a business quota limit", "value": { "status": 429, "code": "QUOTA_EXCEEDED", "message": "Out of resource quota." } }, "GENERIC_429_TOO_MANY_REQUESTS": { "description": "Access to the API has been temporarily blocked due to rate or spike arrest limits being reached", "value": { "status": 429, "code": "TOO_MANY_REQUESTS", "message": "Rate limit reached." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 429 ] }, "code": { "enum": [ "QUOTA_EXCEEDED", "TOO_MANY_REQUESTS" ] } } } ] } } }, "description": "" }, "503": { "content": { "application/json": { "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": "Network issue" } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 503 ] }, "code": { "enum": [ "UNAVAILABLE" ] } } } ] } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "REACHABLE_SMS_PHONE_NUMBER": { "value": { "device": { "phoneNumber": "+99999991000" } } }, "REACHABLE_DATA_PHONE_NUMBER": { "value": { "device": { "phoneNumber": "+99999991001" } } }, "REACHABLE_DATA_AND_SMS_PHONE_NUMBER": { "value": { "device": { "phoneNumber": "+99999991002" } } }, "DISCONNECTED_PHONE_NUMBER": { "value": { "device": { "phoneNumber": "+99999991003" } } } }, "schema": { "description": "The request to retrieve the current roaming-status for the requested device.", "type": "object", "properties": { "device": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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.\n", "type": "object", "properties": { "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}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 } } } } }, "description": "" } } }, "/location-retrieval/v0/retrieve": { "post": { "tags": [ "Location Retrieval v0.2.0" ], "summary": "Execute location retrieval for a user equipment", "operationId": "retrieveLocation", "description": "Retrieve the area where a certain user device is localized.", "responses": { "200": { "content": { "application/json": { "examples": { "LOCATION_CIRCLE": { "value": { "lastLocationTime": "2023-10-17T13:18:23.682Z", "area": { "areaType": "CIRCLE", "center": { "latitude": 45.754114, "longitude": 4.860374 }, "radius": 800 } } }, "LOCATION_POLYGON": { "value": { "lastLocationTime": "2023-10-17T13:18:23.682Z", "area": { "areaType": "POLYGON", "boundary": [ { "latitude": 45.754114, "longitude": 4.860374 }, { "latitude": 45.753845, "longitude": 4.863185 }, { "latitude": 45.75249, "longitude": 4.861876 }, { "latitude": 45.751224, "longitude": 4.861125 }, { "latitude": 45.751442, "longitude": 4.859827 } ] } } } }, "schema": { "type": "object", "description": "Device location", "required": [ "lastLocationTime", "area" ], "properties": { "lastLocationTime": { "description": "Last date and time when the device was localized. It must follow RFC 3339 and must have time zone. Recommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)", "type": "string", "format": "date-time" }, "area": { "type": "object", "properties": { "areaType": { "type": "string", "description": "Type of this area.\nCIRCLE - The area is defined as a circle.\nPOLYGON - The area is defined as a polygon.\n", "enum": [ "CIRCLE", "POLYGON" ] } }, "required": [ "areaType" ] } } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "InvalidArgument": { "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Invalid argument" } }, "MaxAgeIssue": { "value": { "status": 400, "code": "LOCATION_RETRIEVAL.MAXAGE_INVALID_ARGUMENT", "message": "maxAge threshold cannot be satisfied" } } }, "schema": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } } } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Authorization failed: ..." } } }, "schema": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } } } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Operation not allowed: ..." } } }, "schema": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } } } } }, "description": "" }, "404": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 404, "code": "NOT_FOUND", "message": "The specified resource is not found" } } }, "schema": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } } } } }, "description": "" }, "500": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 500, "code": "INTERNAL", "message": "Internal server error" } } }, "schema": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } } } } }, "description": "" }, "503": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 503, "code": "UNAVAILABLE", "message": "Service unavailable" } } }, "schema": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } } } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "LOCATION_RETRIEVAL_PHONE_NUMBER": { "value": { "device": { "phoneNumber": "+99999991000" }, "maxAge": 60 } } }, "schema": { "type": "object", "properties": { "device": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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.\n", "type": "object", "properties": { "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, optionally prefixed with '+'.", "type": "string", "pattern": "^\\+?[0-9]{5,15}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 }, "maxAge": { "type": "integer", "description": "Maximum age of the location information which is accepted for the location retrieval (in seconds)", "minimum": 60 } }, "required": [ "device" ] } } }, "description": "" }, "parameters": [ { "$ref": "#/components/parameters/x-rapidapi-host" } ] } }, "/slice/v1/slices/{id}": { "delete": { "tags": [ "Network Slicing v1.0.0" ], "summary": "Delete network slice.", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "minLength": 5, "maxLength": 64, "pattern": "^[a-zA-Z0-9][a-zA-Z0-9-]{3,63}[a-zA-Z0-9]$", "title": "Slice name or ID", "default": "Concert-2029-Big-Arena" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "delete_slice", "description": "Delete network slice. The slice state must not be active to perform this operation.", "responses": { "202": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": "Accepted" } } }, "schema": { "properties": { "status": { "type": "string", "maxLength": 20, "title": "Status", "default": "Accepted" } }, "type": "object", "title": "Accepted" } } }, "description": "" }, "422": { "content": { "application/json": { "examples": { "Example_1": { "value": { "detail": [ { "loc": [], "msg": "", "type": "" } ] } } }, "schema": { "properties": { "detail": { "items": { "properties": { "loc": { "type": "array", "items": { "type": "string" }, "title": "Location" }, "msg": { "type": "string", "title": "Message" }, "type": { "type": "string", "title": "Error Type" } }, "type": "object", "required": [ "loc", "msg", "type" ], "title": "ValidationError" }, "type": "array", "title": "Detail" } }, "type": "object", "title": "HTTPValidationError" } } }, "description": "" } } }, "get": { "tags": [ "Network Slicing v1.0.0" ], "summary": "Get network slice data.", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "minLength": 5, "maxLength": 64, "pattern": "^[a-zA-Z0-9][a-zA-Z0-9-]{3,63}[a-zA-Z0-9]$", "title": "Slice name or ID", "default": "Concert-2029-Big-Arena" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "get_slice", "description": "Get network slice data.", "responses": { "200": { "content": { "application/json": { "examples": { "Example_1": { "value": { "slice": { "name": "Concert-2029-Big-Arena", "notificationUrl": "", "notificationAuthToken": "", "networkIdentifier": { "mcc": "", "mnc": "" }, "sliceInfo": { "serviceType": 0, "differentiator": "" }, "areaOfService": { "polygon": [ { "lat": 0, "lon": 0 } ] }, "maxDataConnections": 0, "maxDevices": 0, "delayTolerance": "", "servicePriority": 0, "sliceDownlinkThroughput": { "guaranteed": 0, "maximum": 0 }, "sliceUplinkThroughput": { "guaranteed": 0, "maximum": 0 }, "deviceDownlinkThroughput": { "guaranteed": 0, "maximum": 0 }, "deviceUplinkThroughput": { "guaranteed": 0, "maximum": 0 }, "isolationLevel": "NO-ISOLATION", "qos": "", "udm5Qi": "", "customer": { "name": "", "description": "", "address": "", "contact": "" } }, "csi_id": "", "name": "", "state": "PENDING", "provisioner": "" } } }, "schema": { "properties": { "slice": { "properties": { "name": { "type": "string", "maxLength": 64, "minLength": 5, "pattern": "^[a-zA-Z0-9][a-zA-Z0-9-]{3,63}[a-zA-Z0-9]$", "title": "Name", "description": "Optional short name for the slice. Must be ASCII characters, digits and dash. Like name of an event.", "nullable": true }, "notificationUrl": { "type": "string", "maxLength": 255, "title": "Notificationurl", "description": "Contact attached to the order to send back information regarding this order." }, "notificationAuthToken": { "type": "string", "maxLength": 4096, "title": "Notificationauthtoken", "description": "Authorization token for notification sending.", "nullable": true }, "networkIdentifier": { "properties": { "mcc": { "type": "string", "maxLength": 64, "minLength": 2, "pattern": "[0-9]{3}|[a-zA-Z]{2}|[A-Za-z]{3,64}", "title": "Mcc", "description": "Country name, short name, or MCC code. One cannot use country names if a country has several MCC codes, such as the US." }, "mnc": { "type": "string", "maxLength": 3, "minLength": 2, "pattern": "^[0-9]{2,3}$", "title": "Mnc" } }, "type": "object", "required": [ "mcc", "mnc" ], "title": "NetworkIdentifier" }, "sliceInfo": { "properties": { "serviceType": { "type": "integer", "format": "int32", "title": "Servicetype", "description": "Name or ID of slice type (e.g. eMBB, URLLC, MIoT or numeric SST).", "minimum": -2147483648, "maximum": 2147483647 }, "differentiator": { "type": "string", "maxLength": 25, "pattern": "^[A-Fa-f0-9]{1,6}$", "title": "Differentiator", "description": "Differentiator identifies the slice within the type.", "nullable": true } }, "type": "object", "required": [ "serviceType" ], "title": "SliceInfo" }, "areaOfService": { "allOf": [ { "properties": { "polygon": { "items": { "properties": { "lat": { "type": "number", "maximum": 90, "minimum": -90, "title": "Latitude", "default": 0 }, "lon": { "type": "number", "maximum": 180, "minimum": -180, "title": "Longitude", "default": 0 } }, "type": "object", "title": "Point" }, "type": "array", "minItems": 4, "title": "Polygon", "description": "Corners of the polygon defining the area that must be covered. The actual area may be larger, depending on cell areas." } }, "type": "object", "required": [ "polygon" ], "title": "AreaOfService" } ], "description": "Specifies the area where the slice can be used" }, "maxDataConnections": { "type": "integer", "maximum": 1000000, "minimum": 0, "format": "int32", "title": "Maxdataconnections", "description": "Maximum number of data connection sessions in the slice.", "nullable": true }, "maxDevices": { "type": "integer", "maximum": 1000, "minimum": 0, "format": "int32", "title": "Maxdevices", "description": "Maximum number of devices using the slice.", "nullable": true }, "delayTolerance": { "type": "string", "maxLength": 20, "title": "Delaytolerance", "description": "Delaytolerance attribute, True/False or SUPPORTED/NOT SUPPORTED", "nullable": true }, "servicePriority": { "type": "integer", "maximum": 100, "minimum": 0, "format": "int32", "title": "Servicepriority", "description": "ServicePriority attribute", "nullable": true }, "sliceDownlinkThroughput": { "allOf": [ { "properties": { "guaranteed": { "type": "number", "title": "Guaranteed", "description": "Guaranteed throughput in kbps.", "nullable": true }, "maximum": { "type": "number", "title": "Maximum", "description": "Maximum throughput in kbps.", "nullable": true } }, "type": "object", "title": "Throughput" } ], "description": "Data rate parameters (max/guaranteed) supported by the network slice for all devices together in downlink" }, "sliceUplinkThroughput": { "allOf": [ { "properties": { "guaranteed": { "type": "number", "title": "Guaranteed", "description": "Guaranteed throughput in kbps.", "nullable": true }, "maximum": { "type": "number", "title": "Maximum", "description": "Maximum throughput in kbps.", "nullable": true } }, "type": "object", "title": "Throughput" } ], "description": "Data rate parameters (max/guaranteed) supported by the network slice for all devices together in uplink" }, "deviceDownlinkThroughput": { "allOf": [ { "properties": { "guaranteed": { "type": "number", "title": "Guaranteed", "description": "Guaranteed throughput in kbps.", "nullable": true }, "maximum": { "type": "number", "title": "Maximum", "description": "Maximum throughput in kbps.", "nullable": true } }, "type": "object", "title": "Throughput" } ], "description": "Data rate parameters (max/guaranteed) supported by the network slice per device in downlink" }, "deviceUplinkThroughput": { "allOf": [ { "properties": { "guaranteed": { "type": "number", "title": "Guaranteed", "description": "Guaranteed throughput in kbps.", "nullable": true }, "maximum": { "type": "number", "title": "Maximum", "description": "Maximum throughput in kbps.", "nullable": true } }, "type": "object", "title": "Throughput" } ], "description": "Data rate parameters (max/guaranteed) supported by the network slice per device in uplink" }, "isolationLevel": { "allOf": [ { "type": "string", "enum": [ "NO-ISOLATION", "PHYSICAL-ISOLATION", "LOGICAL-ISOLATION" ], "title": "IsolationLevel" } ], "description": "Parameter describing the isolation type" }, "qos": { "type": "string", "maxLength": 20, "title": "Qos", "description": "QoS Identifier", "nullable": true }, "udm5Qi": { "type": "string", "maxLength": 20, "title": "Udm5Qi", "description": "5G QoS Identifier", "nullable": true }, "customer": { "allOf": [ { "properties": { "name": { "type": "string", "maxLength": 250, "title": "Name" }, "description": { "type": "string", "maxLength": 100, "title": "Description", "description": "Description of the slice, e.g. \"B2B_5G_eMBB_Slice\"", "nullable": true }, "address": { "type": "string", "maxLength": 250, "title": "Address", "description": "Address of the customer ordering slice creation.", "nullable": true }, "contact": { "type": "string", "maxLength": 250, "title": "Contact", "description": "Contact of the customer ordering slice creation.", "nullable": true } }, "type": "object", "required": [ "name" ], "title": "Customer" } ], "description": "Customer created the slice" } }, "type": "object", "required": [ "notificationUrl", "networkIdentifier", "sliceInfo" ], "title": "Slice" }, "csi_id": { "type": "string", "title": "Csi Id", "description": "Communications Service Instance identifier.", "nullable": true }, "name": { "type": "string", "title": "Name", "description": "Name/resource identifier of the network slice." }, "state": { "type": "string", "enum": [ "PENDING", "AVAILABLE", "OPERATING", "DELETED", "FAILED" ], "title": "SliceState" }, "provisioner": { "type": "string", "maxLength": 50, "title": "Provisioner", "description": "The organization provisioning the slice" } }, "type": "object", "required": [ "slice", "name", "state", "provisioner" ], "title": "SliceData" } } }, "description": "" }, "422": { "content": { "application/json": { "examples": { "Example_1": { "value": { "detail": [ { "loc": [], "msg": "", "type": "" } ] } } }, "schema": { "properties": { "detail": { "items": { "properties": { "loc": { "type": "array", "items": { "type": "string" }, "title": "Location" }, "msg": { "type": "string", "title": "Message" }, "type": { "type": "string", "title": "Error Type" } }, "type": "object", "required": [ "loc", "msg", "type" ], "title": "ValidationError" }, "type": "array", "title": "Detail" } }, "type": "object", "title": "HTTPValidationError" } } }, "description": "" } } } }, "/passthrough/camara/v1/consent-info/consent-info/v0.1/retrieve": { "post": { "tags": [ "Consent Info v0.1.0" ], "summary": "Create a request to retrieve the validity status of the data processing", "parameters": [ { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": {} }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "retrieveStatus", "description": "Create a request to retrieve the validity status of the API Consumer data processing for a given User, scope(s) and Purpose.\n", "responses": { "200": { "content": { "application/json": { "examples": { "CONSENT_REQUIRED": { "description": "Consent is required for the requested scope(s) and Purpose\n", "value": { "statusInfo": [ { "scopes": [ "location-verification:verify" ], "purpose": "dpv:FraudPreventionAndDetection", "statusValidForProcessing": false, "statusReason": "REQUESTED" } ] } }, "MULTIPLES_SCOPES_ONE_API_DIFFERENT_STATUS": { "description": "Request with multiple scopes corresponding to one API. Different status for each scope.\n", "value": { "statusInfo": [ { "scopes": [ "sim-swap:check" ], "purpose": "dpv:FraudPreventionAndDetection", "statusValidForProcessing": true }, { "scopes": [ "sim-swap:retrieve-date" ], "purpose": "dpv:FraudPreventionAndDetection", "statusValidForProcessing": false, "statusReason": "OBJECTED" } ] } }, "MULTIPLE_SCOPES_MULTIPLE_APIS": { "description": "Request with multiple scopes corresponding to multiple APIs.\n", "value": { "statusInfo": [ { "scopes": [ "location-verification:verify" ], "purpose": "dpv:FraudPreventionAndDetection", "statusValidForProcessing": false, "statusReason": "PENDING" }, { "scopes": [ "device-roaming-status:read" ], "purpose": "dpv:FraudPreventionAndDetection", "statusValidForProcessing": false, "statusReason": "PENDING" } ], "captureUrl": "https://example.org/consent-capture-url" } }, "CONSENT_REQUIRED_CAPTURE_URL": { "description": "Consent is required for the requested scope(s) and Purpose but it is expired. The API Provider provides a Consent capture URL.\n", "value": { "statusInfo": [ { "scopes": [ "location-verification:verify" ], "purpose": "dpv:FraudPreventionAndDetection", "statusValidForProcessing": false, "statusReason": "EXPIRED", "expirationDate": "2023-07-03T14:27:08.312+02:00" } ], "captureUrl": "https://example.org/consent-capture-url" } }, "CONSENT_REVOKED": { "description": "Consent is revoked for the requested scope(s) and Purpose.\n", "value": { "statusInfo": [ { "scopes": [ "location-verification:verify" ], "purpose": "dpv:FraudPreventionAndDetection", "statusValidForProcessing": false, "statusReason": "REVOKED" } ] } }, "READY_FOR_PROCESSING": { "description": "Data processing is allowed for the requested scope(s) and Purpose.\n", "value": { "statusInfo": [ { "scopes": [ "number-verification:verify" ], "purpose": "dpv:FraudPreventionAndDetection", "statusValidForProcessing": true } ] } }, "DATA_PROCESSING_OPT_OUT": { "description": "The User has opted out of the data processing for the requested scope(s) and Purpose.\n", "value": { "statusInfo": [ { "scopes": [ "number-verification:verify" ], "purpose": "dpv:FraudPreventionAndDetection", "statusValidForProcessing": false, "statusReason": "OBJECTED" } ] } }, "MULTIPLE_SCOPES_ONE_API": { "description": "Request with multiple scopes corresponding to one API.\n", "value": { "statusInfo": [ { "scopes": [ "quality-on-demand:sessions:create", "quality-on-demand:sessions:read", "quality-on-demand:sessions:update", "quality-on-demand:sessions:delete", "quality-on-demand:sessions:retrieve-by-device" ], "purpose": "dpv:RequestedServiceProvision", "statusValidForProcessing": true } ] } } }, "schema": { "type": "object", "required": [ "statusInfo" ], "properties": { "statusInfo": { "type": "array", "description": "Provides information about the validity status of the requested data processing for the specified scope(s) and Purpose. It contains details of whether the processing of the data is currently valid and, if not, the reason why. The expiration date of the validity may be also provided if applicable.\n\nMore than one array item may be required for the requested scope(s) and Purpose, e.g. when the requested scopes relate to multiple APIs.\n", "items": { "type": "object", "required": [ "scopes", "purpose", "statusValidForProcessing" ], "properties": { "scopes": { "type": "array", "minItems": 1, "items": { "type": "string" }, "description": "List of requested scopes. The scope is a string that represents the access rights that the API Consumer is requesting from the User.\n" }, "purpose": { "type": "string", "pattern": "^dpv:[a-zA-Z0-9]+$", "description": "The reason for which personal data will be processed by the API Consumer. CAMARA defines a standard set of Purposes which can be used by API Consumers to specify the reason for their intended personal data processing. CAMARA uses the [W3C Data Privacy Vocabulary](https://w3c.github.io/dpv/2.0/dpv/) (DPV) to represent these purposes e.g. `dpv:FraudPreventionAndDetection` or `dpv:RequestedServiceProvision`.\n" }, "statusValidForProcessing": { "type": "boolean", "description": "Boolean flag that shows the validity status of the requested data processing for the specified scope(s) and Purpose.\n* `true` - indicates that the current status is valid and permits the requested data processing.\n* `false` - indicates that the requested data processing is not permitted. The reason for this is provided in the `statusReason` field.\n" }, "statusReason": { "type": "string", "enum": [ "PENDING", "REQUESTED", "REVOKED", "EXPIRED", "OBJECTED" ], "description": "This field must be present if `statusValidForProcessing` is `false`. It indicates the reason why the requested data processing is not permitted for the specified scope(s) and Purpose. It provides API Consumers with additional context on the current validity status, helping them to understand its applicability and the next steps they may need to take.\n\nIt is particularly useful for determining whether the API Consumer should prompt the User to take action, such as providing Consent or renewing an existing Consent.\n\nPossible values are:\n\n- `PENDING`: The requested data processing has not yet been established or fully validated under the applicable privacy regulations.\n\n\n\n\n\n For example, the User has not yet provided Consent when it is required.\n- `REQUESTED`: The permission for the requested data processing has been submitted but has not yet been granted or confirmed.\n\n\n\n\n\n This is common when the API Consumer has initiated a request for Consent capture, but the User has not yet completed the process. For example, this occurs when a notice prompting the User to provide Consent has been displayed, but they have not yet made a decision.\n- `REVOKED`: The User has actively withdrawn their permission for the requested data processing after previously opting in.\n\n\n\n\n\n For example, the User revokes their Consent for the data processing.\n- `OBJECTED`: The user has opted out of the requested data processing, despite a previous explicit opt-in not being required.\n\n\n\n\n\n This is common when the User has exercised their right to object to data processing under the applicable privacy regulations.\n- `EXPIRED`: When applicable, the validity of the data processing has ceased due to the passage of time or a pre-defined condition.\n\n\n\n\n\n This is common for time-limited Consents.\n" }, "expirationDate": { "type": "string", "format": "date-time", "description": "The date and time at which the validity of the data processing is set to expire or has expired.\nIt applies mainly to time-limited Consents, or other cases where a specific duration of validity is defined for the data processing. This field is only applicable:\n\n- if `statusValidForProcessing` is `true` (indicating a future expiration), or\n- if `statusValidForProcessing` is `false` and `statusReason` is `EXPIRED` (indicating the past expiration date).\n\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone. Recommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z).\n" } } }, "minItems": 1 }, "captureUrl": { "type": "string", "format": "url", "description": "URL where the User can provide the necessary Consent. This field is only present in the API response if the API Consumer requests it and if the following conditions are met:\n\n- `statusInfo[*].statusValidForProcessing` is `false`, and\n- `statusInfo[*].statusReason` is `PENDING`, `REQUESTED` or `EXPIRED`.\n\nPlease note that this field is only applicable when the User Consent is required to enable valid data processing. A unique URL is provided to authorise all items in the statusInfo list that require user action.\n" } } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "GENERIC_400_INVALID_ARGUMENT": { "description": "Invalid Argument. Generic Syntax Exception", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 400 ] }, "code": { "enum": [ "INVALID_ARGUMENT" ] } } } ] } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "GENERIC_401_UNAUTHENTICATED": { "description": "Request cannot be authenticated", "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials. A new authentication is required." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 401 ] }, "code": { "enum": [ "UNAUTHENTICATED" ] } } } ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "GENERIC_403_PERMISSION_DENIED": { "description": "Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security", "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action." } }, "CAPTURE_FREQUENCY_EXCEEDED": { "description": "The frequency of consent capture requests has been exceeded.", "value": { "status": 403, "code": "CONSENT_INFO.CAPTURE_FREQUENCY_EXCEEDED", "message": "The frequency of consent capture requests has been exceeded. Please try again later." } }, "NOT_ALLOWED_SCOPES_PURPOSE": { "description": "The requested scope(s) and Purpose combination is not allowed for the API Consumer, e.g. the API Consumer has not onboarded the appropriate API(s) with the API Provider for the declared Purpose.", "value": { "status": 403, "code": "CONSENT_INFO.NOT_ALLOWED_SCOPES_PURPOSE", "message": "The requested scope(s) and Purpose combination is not allowed for this API Consumer." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 403 ] }, "code": { "enum": [ "PERMISSION_DENIED", "CONSENT_INFO.NOT_ALLOWED_SCOPES_PURPOSE", "CONSENT_INFO.CAPTURE_FREQUENCY_EXCEEDED" ] } } } ] } } }, "description": "" }, "404": { "content": { "application/json": { "examples": { "GENERIC_404_IDENTIFIER_NOT_FOUND": { "description": "Some identifier cannot be matched to a device", "value": { "status": 404, "code": "IDENTIFIER_NOT_FOUND", "message": "Phone number not found." } }, "GENERIC_404_NOT_FOUND": { "description": "Resource is not found", "value": { "status": 404, "code": "NOT_FOUND", "message": "The specified resource is not found." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 404 ] }, "code": { "enum": [ "NOT_FOUND", "IDENTIFIER_NOT_FOUND" ] } } } ] } } }, "description": "" }, "422": { "content": { "application/json": { "examples": { "GENERIC_422_MISSING_IDENTIFIER": { "description": "An identifier is not included in the request and the device or phone number identification cannot be derived from the 3-legged access token", "value": { "status": 422, "code": "MISSING_IDENTIFIER", "message": "The phone number cannot be identified." } }, "GENERIC_422_UNNECESSARY_IDENTIFIER": { "description": "An explicit identifier is provided when a device or phone number has already been identified from the access token", "value": { "status": 422, "code": "UNNECESSARY_IDENTIFIER", "message": "The phone number is already identified by the access token." } }, "GENERIC_422_SERVICE_NOT_APPLICABLE": { "description": "Service not applicable for the provided identifier", "value": { "status": 422, "code": "SERVICE_NOT_APPLICABLE", "message": "The service is not available for the provided phone number." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 422 ] }, "code": { "enum": [ "SERVICE_NOT_APPLICABLE", "MISSING_IDENTIFIER", "UNNECESSARY_IDENTIFIER" ] } } } ] } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "SCOPE_VALID_FOR_PROCESSING": { "value": { "phoneNumber": "+99999991000", "scopes": [ "location-verification:verify" ], "purpose": "dpv:FraudPreventionAndDetection", "requestCaptureUrl": false } }, "SCOPE_NOT_VALID_STATUS_PENDING": { "value": { "phoneNumber": "+99999991001", "scopes": [ "quality-on-demand:sessions:create" ], "purpose": "dpv:RequestedServiceProvision", "requestCaptureUrl": false } }, "SCOPE_NOT_VALID_STATUS_REQUESTED": { "value": { "phoneNumber": "+99999991002", "scopes": [ "device-roaming-status:read" ], "purpose": "dpv:FraudPreventionAndDetection", "requestCaptureUrl": false } }, "SCOPE_NOT_VALID_STATUS_REVOKED": { "value": { "phoneNumber": "+99999991003", "scopes": [ "sim-swap:check" ], "purpose": "dpv:FraudPreventionAndDetection", "requestCaptureUrl": false } }, "SCOPE_NOT_VALID_STATUS_EXPIRED": { "value": { "phoneNumber": "+99999991004", "scopes": [ "number-verification:verify" ], "purpose": "dpv:FraudPreventionAndDetection", "requestCaptureUrl": false } }, "SCOPE_NOT_VALID_STATUS_OBJECTED": { "value": { "phoneNumber": "+99999991005", "scopes": [ "location-verification:verify" ], "purpose": "dpv:FraudPreventionAndDetection", "requestCaptureUrl": false } } }, "schema": { "type": "object", "description": "The request body for the retrieve status request. It contains the requested scope(s), the Purpose for which the API Consumer intends to process the User's personal data, a flag indicating whether the API Consumer requests a Consent capture URL and optionally the phone number of the User. The phone number is required when the API is invoked using a two-legged access token, but MUST NOT be provided when a three-legged access token is used, as the subject will be uniquely identified from the access token.\n", "required": [ "scopes", "purpose", "requestCaptureUrl" ], "properties": { "phoneNumber": { "type": "string", "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 '+'.", "pattern": "^\\+[1-9][0-9]{4,14}$" }, "scopes": { "type": "array", "minItems": 1, "items": { "type": "string" }, "description": "List of requested scopes. The scope is a string that represents the access rights that the API Consumer is requesting from the User.\n" }, "purpose": { "type": "string", "pattern": "^dpv:[a-zA-Z0-9]+$", "description": "The reason for which personal data will be processed by the API Consumer. CAMARA defines a standard set of Purposes which can be used by API Consumers to specify the reason for their intended personal data processing. CAMARA uses the [W3C Data Privacy Vocabulary](https://w3c.github.io/dpv/2.0/dpv/) (DPV) to represent these purposes e.g. `dpv:FraudPreventionAndDetection` or `dpv:RequestedServiceProvision`.\n" }, "requestCaptureUrl": { "type": "boolean", "description": "A boolean flag indicating whether the API Consumer requests API Provider to return a Consent capture URL.\n* `true` - If set to `true` the API will include a `captureUrl` in the response body if applicable.\n* `false` - The API will omit the Consent capture URL from the response.\n" } } } } }, "description": "" } } }, "/passthrough/camara/v1/sim-swap/sim-swap/v0/retrieve-date": { "post": { "tags": [ "SIM Swap v1.0.0" ], "parameters": [ { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": { "type": "string" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "retrieveSimSwapDate", "description": "Get timestamp of last SIM swap event for a mobile user account provided with phone number.", "responses": { "200": { "content": { "application/json": { "examples": { "Example_1": { "value": { "latestSimChange": "2023-07-03T14:27:08.312+02:00" } } }, "schema": { "type": "object", "required": [ "latestSimChange" ], "properties": { "latestSimChange": { "type": "string", "format": "date-time", "description": "Timestamp of latest SIM swap performed. It must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone. Recommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)", "nullable": true } } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "GENERIC_400_INVALID_ARGUMENT": { "description": "Invalid Argument. Generic Syntax Exception", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param." } } }, "schema": { "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" } } } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "GENERIC_401_UNAUTHENTICATED": { "description": "Request cannot be authenticated", "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials." } } }, "schema": { "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" } } } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "GENERIC_403_INVALID_TOKEN_CONTEXT": { "description": "Reflect some inconsistency between information in some field of the API and the related OAuth2 Token", "value": { "status": 403, "code": "INVALID_TOKEN_CONTEXT", "message": "phoneNumber is not consistent with access token" } }, "GENERIC_403_PERMISSION_DENIED": { "description": "Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security", "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action." } } }, "schema": { "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" } } } } }, "description": "" }, "404": { "content": { "application/json": { "examples": { "GENERIC_404_NOT_FOUND": { "description": "Resource is not found", "value": { "status": 404, "code": "NOT_FOUND", "message": "The specified resource is not found." } } }, "schema": { "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" } } } } }, "description": "" }, "422": { "content": { "application/json": { "examples": { "UNIDENTIFIABLE_PHONE_NUMBER": { "description": "The phone number is not included in the request and the phone number information cannot be derived from the 3-legged access token", "value": { "status": 422, "code": "UNIDENTIFIABLE_PHONE_NUMBER", "message": "The phone number cannot be identified" } }, "GENERIC_422_NOT_SUPPORTED": { "description": "Not Supported", "value": { "status": 422, "code": "NOT_SUPPORTED", "message": "Service not supported for this phoneNumber" } } }, "schema": { "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" } } } } }, "description": "" }, "500": { "content": { "application/json": { "examples": { "GENERIC_500_INTERNAL": { "description": "Problem in Server side. Regular Server Exception", "value": { "status": 500, "code": "INTERNAL", "message": "Unknown server error. Typically a server bug." } } }, "schema": { "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" } } } } }, "description": "" }, "503": { "content": { "application/json": { "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." } } }, "schema": { "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" } } } } }, "description": "" }, "504": { "content": { "application/json": { "examples": { "GENERIC_504_TIMEOUT": { "description": "API Server Timeout", "value": { "status": 504, "code": "TIMEOUT", "message": "Request timeout exceeded." } } }, "schema": { "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" } } } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "SIM_SWAP_RETRIEVE_PHONE_NUMBER": { "value": { "phoneNumber": "+99999991000" } } }, "schema": { "type": "object", "properties": { "phoneNumber": { "type": "string", "pattern": "^\\+[1-9][0-9]{4,14}$", "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 '+'." } } } } }, "description": "" } } }, "/quality-on-demand/v1/sessions/{sessionId}/extend": { "post": { "tags": [ "Quality-of-Service on Demand v1.0.0" ], "summary": "Extend the duration of an active session", "parameters": [ { "name": "sessionId", "in": "path", "required": true, "description": "Session ID that was obtained from the createSession operation", "schema": { "description": "Session ID in UUID format", "type": "string", "format": "uuid" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "extendQosSessionDuration-QoD-V1", "description": "Extend the overall duration of an active QoS session. If this operation is executed successfully, the new duration of the target session will be the original duration plus the additionally requested duration.\nThe new remaining duration of the QoS session shall not exceed the maximum remaining duration limit (currently fixed at 86,400 seconds) where the remaining duration is calculated as the difference between the `expiresAt` and current time when the request to extend the session duration is received. If this maximum limit would be exceeded, the overall duration shall be set such that the remaining duration is equal to this limit.\nAn example: A QoD session was originally created with duration 80,000 seconds. 10,000 seconds later, the developer requested to extend the session by 20,000 seconds.\n- Original duration: 80,000 seconds\n- Elapsed time: 10,000 seconds\n- Remaining duration: 70,000 seconds\n- New remaining duration: 86,400 seconds (the maximum allowed)\n- New overall session duration: 96,400 seconds\n", "responses": { "200": { "content": { "application/json": { "examples": { "Example_1": { "value": { "device": { "phoneNumber": "+123456789", "networkAccessIdentifier": "123456789@domain.com", "ipv4Address": { "publicAddress": "84.125.93.10", "privateAddress": "84.125.93.10", "publicPort": 0 }, "ipv6Address": "2001:db8:85a3:8d3:1319:8a2e:370:7344" }, "applicationServer": { "ipv4Address": "192.168.0.1/24", "ipv6Address": "2001:db8:85a3:8d3:1319:8a2e:370:7344" }, "devicePorts": { "ranges": [ { "from": 0, "to": 0 } ], "ports": [] }, "applicationServerPorts": { "ranges": [ { "from": 0, "to": 0 } ], "ports": [] }, "qosProfile": "QCI_1_voice", "sink": "https://endpoint.example.com/sink", "sinkCredential": { "credentialType": "ACCESSTOKEN" }, "sessionId": "", "duration": 86400, "startedAt": "2024-06-01T12:00:00Z", "expiresAt": "2024-06-01T13:00:00Z", "qosStatus": "REQUESTED", "statusInfo": "DURATION_EXPIRED", "messages": [ { "severity": "INFO", "description": "" } ] } } }, "schema": { "description": "Session related information.", "allOf": [ { "description": "Common attributes of a QoD session", "type": "object", "properties": { "device": { "description": "End-user equipment able to connect to a network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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\n", "type": "object", "properties": { "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": "^\\+?[0-9]{5,15}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n\nThe session shall apply to all IP flows between the device subnet and the specified application server, unless further restricted by the optional parameters devicePorts or applicationServerPorts.\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 }, "applicationServer": { "description": "A server hosting backend applications to deliver some business logic to clients.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n", "type": "object", "properties": { "ipv4Address": { "type": "string", "description": "IPv4 address may be specified in form
as:\n - address - an IPv4 number in dotted-quad form 1.2.3.4. Only this exact IP number will match the flow control rule.\n - address/mask - an IP number as above with a mask width of the form 1.2.3.4/24.\n In this case, all IP numbers from 1.2.3.0 to 1.2.3.255 will match. The bit width MUST be valid for the IP version.\n" }, "ipv6Address": { "type": "string", "description": "IPv6 address may be specified in form
as:\n - address - The /128 subnet is optional for single addresses:\n - 2001:db8:85a3:8d3:1319:8a2e:370:7344\n - 2001:db8:85a3:8d3:1319:8a2e:370:7344/128\n - address/mask - an IP v6 number with a mask:\n - 2001:db8:85a3:8d3::0/64\n - 2001:db8:85a3:8d3::/64\n" } }, "minProperties": 1 }, "devicePorts": { "description": "The ports used locally by the device for flows to which the requested QoS profile should apply. If omitted, then the qosProfile will apply to all flows between the device and the specified application server address and ports", "allOf": [ { "type": "object", "minProperties": 1, "properties": { "ranges": { "type": "array", "minItems": 1, "items": { "type": "object", "required": [ "from", "to" ], "properties": { "from": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 }, "to": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } }, "ports": { "type": "array", "minItems": 1, "items": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } } ] }, "applicationServerPorts": { "description": "A list of single ports or port ranges on the application server", "allOf": [ { "type": "object", "minProperties": 1, "properties": { "ranges": { "type": "array", "minItems": 1, "items": { "type": "object", "required": [ "from", "to" ], "properties": { "from": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 }, "to": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } }, "ports": { "type": "array", "minItems": 1, "items": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } } ] }, "qosProfile": { "description": "A unique name for identifying a specific QoS profile.\nThis may follow different formats depending on the service providers implementation.\nSome options addresses:\n\n\n\n\n\n - A UUID style string\n - Support for predefined profiles QOS_S, QOS_M, QOS_L, and QOS_E\n - A searchable descriptive name\n", "type": "string", "minLength": 3, "maxLength": 256, "format": "string", "pattern": "^[a-zA-Z0-9_.-]+$" }, "sink": { "type": "string", "format": "uri", "description": "The address to which events about all status changes of the session (e.g. session termination) shall be delivered using the selected protocol." }, "sinkCredential": { "description": "A sink credential provides authentication or authorization information necessary to enable delivery of events to a target.", "allOf": [ { "type": "object", "properties": { "credentialType": { "type": "string", "enum": [ "ACCESSTOKEN" ], "description": "The type of the credential.\nNote: Type of the credential - MUST be set to ACCESSTOKEN for now\n" } }, "required": [ "credentialType" ] } ] } }, "required": [ "applicationServer", "qosProfile" ] }, { "type": "object", "properties": { "sessionId": { "description": "Session ID in UUID format", "type": "string", "format": "uuid" }, "duration": { "type": "integer", "format": "int32", "minimum": 1, "maximum": 2147483647 }, "startedAt": { "description": "Date and time when the QoS status became \"AVAILABLE\". Not to be returned when `qosStatus` is \"REQUESTED\". Format must follow RFC 3339 and must indicate time zone (UTC or local).", "type": "string", "format": "date-time" }, "expiresAt": { "description": "Date and time of the QoS session expiration. Format must follow RFC 3339 and must indicate time zone (UTC or local).\n- When `qosStatus` is \"AVAILABLE\", it is the limit time when the session is scheduled to finnish, if not terminated by other means.\n- When `qosStatus` is \"UNAVAILABLE\", it is the time when the session was terminated.\n- Not to be returned when `qosStatus` is \"REQUESTED\".\nWhen the session is extended, the value is the new expiration time of the session.\n", "type": "string", "format": "date-time" }, "qosStatus": { "description": "The current status of the requested QoS session. The status can be one of the following:\n* `REQUESTED` - QoS has been requested by creating a session\n* `AVAILABLE` - The requested QoS has been provided by the network\n* `UNAVAILABLE` - The requested QoS cannot be provided by the network due to some reason\n", "type": "string", "enum": [ "REQUESTED", "AVAILABLE", "UNAVAILABLE" ] }, "statusInfo": { "description": "Reason for the new `qosStatus`. Currently `statusInfo` is only applicable when `qosStatus` is 'UNAVAILABLE'.\n* `DURATION_EXPIRED` - Session terminated due to requested duration expired\n* `NETWORK_TERMINATED` - Network terminated the session before the requested duration expired\n* `DELETE_REQUESTED`- User requested the deletion of the session before the requested duration expired\n", "type": "string", "enum": [ "DURATION_EXPIRED", "NETWORK_TERMINATED", "DELETE_REQUESTED" ] }, "messages": { "type": "array", "items": { "type": "object", "properties": { "severity": { "description": "Message severity", "type": "string", "enum": [ "INFO", "WARNING" ] }, "description": { "description": "Detailed message text", "type": "string" } }, "required": [ "severity", "description" ] } } }, "required": [ "sessionId", "duration", "qosStatus" ] } ] } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "Generic400": { "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Schema validation failed at ..." } }, "InactiveSession": { "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "The target session is inactive" } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Authorization failed: ..." } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Operation not allowed: ..." } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "404": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 404, "code": "NOT_FOUND", "message": "Session Id does not exist" } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "500": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 500, "code": "INTERNAL", "message": "Internal server error: ..." } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" }, "503": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 503, "code": "UNAVAILABLE", "message": "Service unavailable" } } }, "schema": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "Example_1": { "value": { "requestedAdditionalDuration": 60 } } }, "schema": { "description": "Attributes required to extend the duration of an active session", "type": "object", "properties": { "requestedAdditionalDuration": { "description": "Additional duration in seconds to be extended.\n", "type": "integer", "format": "int32", "minimum": 1, "maximum": 86399 } }, "required": [ "requestedAdditionalDuration" ] } } }, "description": "" } } }, "/device-status/v0/subscriptions/{subscriptionId}": { "get": { "tags": [ "Device Status v0.5.1" ], "summary": "Retrieve a device status event subscription for a device", "parameters": [ { "name": "subscriptionId", "in": "path", "required": true, "description": "Subscription identifier that was obtained from the create subscription operation", "schema": { "type": "string" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "retrieveSubscription", "description": "retrieve event subscription information for a given subscription.", "responses": { "200": { "content": { "application/json": { "examples": { "Example_1": { "value": { "subscriptionDetail": { "device": { "phoneNumber": "123456789", "networkAccessIdentifier": "123456789@domain.com", "ipv4Address": { "publicAddress": "84.125.93.10", "privateAddress": "84.125.93.10", "publicPort": 0 }, "ipv6Address": "2001:db8:85a3:8d3:1319:8a2e:370:7344" }, "type": "org.camaraproject.device-status.v0.roaming-status" }, "subscriptionExpireTime": "2023-01-17T13:18:23.682Z", "webhook": { "notificationUrl": "https://application-server.com", "notificationAuthToken": "c8974e592c2fa383d4a3960714" }, "subscriptionId": "qs15-h556-rt89-1298", "startsAt": "", "expiresAt": "" } } }, "schema": { "description": "Represents a device status subscription.", "allOf": [ { "description": "The request for creating a Device Status event subscription", "type": "object", "required": [ "webhook", "subscriptionDetail" ], "properties": { "subscriptionDetail": { "description": "The detail of the requested event subscription", "type": "object", "required": [ "type", "device" ], "properties": { "device": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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.\n", "type": "object", "properties": { "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, optionally prefixed with '+'.", "type": "string", "pattern": "^\\+?[0-9]{5,15}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 }, "type": { "type": "string", "description": "roaming-status - Event triggered when the device switch from roaming ON to roaming OFF and conversely\n\nroaming-on - Event triggered when the device switch from roaming OFF to roaming ON\n\nroaming-off - Event triggered when the device switch from roaming ON to roaming OFF\n\nroaming-change-country - Event triggered when the device in roaming change country code\n\nconnectivity-data - Event triggered when the device is connected to the network for Data usage.\n\nconnectivity-sms - Event triggered when the device is connected to the network for SMS usage\n\nconnectivity-disconnected - Event triggered when the device is not connected.\n", "enum": [ "org.camaraproject.device-status.v0.roaming-status", "org.camaraproject.device-status.v0.roaming-on", "org.camaraproject.device-status.v0.roaming-off", "org.camaraproject.device-status.v0.roaming-change-country", "org.camaraproject.device-status.v0.connectivity-data", "org.camaraproject.device-status.v0.connectivity-sms", "org.camaraproject.device-status.v0.connectivity-disconnected" ] } } }, "subscriptionExpireTime": { "type": "string", "format": "date-time", "description": "The subscription expiration time in date-time format." }, "webhook": { "description": "Webhook information for event channel", "type": "object", "required": [ "notificationUrl" ], "properties": { "notificationUrl": { "type": "string", "description": "https callback address where the event notification must be POST-ed" }, "notificationAuthToken": { "type": "string", "description": "OAuth2 token to be used by the callback API endpoint. It MUST be indicated within HTTP Authorization header e.g. Authorization: Bearer $notificationAuthToken\n" } } } } }, { "type": "object", "properties": { "subscriptionId": { "type": "string", "description": "The event subscription identifier." }, "startsAt": { "type": "string", "format": "date-time", "description": "date time when subscription started" }, "expiresAt": { "type": "string", "format": "date-time", "description": "date time when subscription will expire or expired" } }, "required": [ "subscriptionId" ] } ] } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param" } } }, "schema": { "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" } } } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials" } } }, "schema": { "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" } } } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action" } } }, "schema": { "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" } } } } }, "description": "" }, "404": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 404, "code": "NOT_FOUND", "message": "The specified resource is not found" } } }, "schema": { "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" } } } } }, "description": "" }, "500": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 500, "code": "INTERNAL", "message": "Server error" } } }, "schema": { "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" } } } } }, "description": "" }, "503": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 503, "code": "UNAVAILABLE", "message": "Service unavailable" } } }, "schema": { "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" } } } } }, "description": "" } } }, "delete": { "tags": [ "Device Status v0.5.1" ], "summary": "Delete a device status event subscription for a device", "parameters": [ { "name": "subscriptionId", "in": "path", "required": true, "description": "Subscription identifier that was obtained from the create event subscription operation", "schema": { "type": "string" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "deleteSubscription", "description": "delete a given event subscription.", "responses": { "202": { "content": { "application/json": { "examples": { "Example_1": { "value": { "subscriptionId": "qs15-h556-rt89-1298" } } }, "schema": { "description": "Response for a device status operation managed asynchronously (Creation or Deletion)", "type": "object", "properties": { "subscriptionId": { "type": "string", "description": "The event subscription identifier." } } } } }, "description": "" }, "204": { "content": { "application/json": { "examples": { "Example_1": { "value": {} } }, "schema": {} } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param" } } }, "schema": { "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" } } } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials" } } }, "schema": { "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" } } } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action" } } }, "schema": { "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" } } } } }, "description": "" }, "404": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 404, "code": "NOT_FOUND", "message": "The specified resource is not found" } } }, "schema": { "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" } } } } }, "description": "" }, "500": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 500, "code": "INTERNAL", "message": "Server error" } } }, "schema": { "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" } } } } }, "description": "" }, "503": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 503, "code": "UNAVAILABLE", "message": "Service unavailable" } } }, "schema": { "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" } } } } }, "description": "" } } } }, "/device-status/device-roaming-status/v1/retrieve": { "post": { "tags": [ "Device Roaming Status Retrieve v1.1.0" ], "summary": "Get the current roaming status and the country information", "parameters": [ { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": {} }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "getRoamingStatus", "description": "Get the current roaming status and the country information", "responses": { "200": { "content": { "application/json": { "examples": { "Not Roaming": { "value": { "lastStatusTime": "2024-02-20T10:41:38.657Z", "roaming": false } }, "No Country Name": { "value": { "lastStatusTime": "2024-02-20T10:41:38.657Z", "roaming": true, "countryCode": 901, "countryName": [] } }, "Single Country Code": { "value": { "lastStatusTime": "2024-02-20T10:41:38.657Z", "roaming": true, "countryCode": 262, "countryName": [ "DE" ] } }, "Multiple Country Codes": { "value": { "lastStatusTime": "2024-02-20T10:41:38.657Z", "roaming": true, "countryCode": 340, "countryName": [ "BL", "GF", "GP", "MF", "MQ" ] } }, "Single Country Code With Device Disambiguation": { "value": { "device": { "phoneNumber": "+99999991000" }, "lastStatusTime": "2024-02-20T10:41:38.657Z", "roaming": true, "countryCode": 262, "countryName": [ "DE" ] } } }, "schema": { "type": "object", "required": [ "lastStatusTime", "roaming" ], "properties": { "device": { "description": "An identifier for the end-user equipment able to connect to the network that the response refers to. This parameter is only returned when the API consumer includes the `device` parameter in their request (i.e. they are using a two-legged access token), and is relevant when more than one device identifier is specified, as only one of those device identifiers is allowed in the response.\n\nIf the API consumer provides more than one device identifier in their request, the API provider must return a single identifier which is the one they are using to fulfil the request, even if the identifiers do not match the same device. API provider does not perform any logic to validate/correlate that the indicated device identifiers match the same device. No error should be returned if the identifiers are otherwise valid to prevent API consumers correlating different identifiers with a given end user.\n", "allOf": [ { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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.\n", "type": "object", "properties": { "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}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 }, { "maxProperties": 1 } ] }, "lastStatusTime": { "description": "Last time that the associated device reachability status was updated.\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\nRecommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)\n", "type": "string", "format": "date-time" }, "roaming": { "description": "Roaming status. True, if it is roaming", "type": "boolean" }, "countryCode": { "description": "The Mobile country code (MCC) as an geographic region identifier for the country and the dependent areas.", "type": "integer" }, "countryName": { "description": "The ISO 3166 ALPHA-2 country-codes of mapped to mobile country code(MCC). If there is mapping of one MCC to multiple countries, then we have list of countries. If there is no mapping of MCC to any country, then an empty array [] shall be returned..", "type": "array", "items": { "type": "string" } } } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "GENERIC_400_INVALID_ARGUMENT": { "description": "Invalid Argument. Generic Syntax Exception", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 400 ] }, "code": { "enum": [ "INVALID_ARGUMENT" ] } } } ] } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "GENERIC_401_UNAUTHENTICATED": { "description": "Request cannot be authenticated and a new authentication is required", "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials. A new authentication is required." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 401 ] }, "code": { "enum": [ "UNAUTHENTICATED" ] } } } ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "GENERIC_403_PERMISSION_DENIED": { "description": "Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security", "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 403 ] }, "code": { "enum": [ "PERMISSION_DENIED" ] } } } ] } } }, "description": "" }, "404": { "content": { "application/json": { "examples": { "GENERIC_404_NOT_FOUND": { "description": "Resource is not found", "value": { "status": 404, "code": "NOT_FOUND", "message": "The specified resource is not found." } }, "GENERIC_404_IDENTIFIER_NOT_FOUND": { "description": "The phone number is not associated with a CSP customer account", "value": { "status": 404, "code": "IDENTIFIER_NOT_FOUND", "message": "The phone number provided is not associated with a customer account" } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 404 ] }, "code": { "enum": [ "NOT_FOUND", "IDENTIFIER_NOT_FOUND" ] } } } ] } } }, "description": "" }, "422": { "content": { "application/json": { "examples": { "GENERIC_422_UNNECESSARY_IDENTIFIER": { "description": "An explicit identifier is provided when a device or phone number has already been identified from the access token", "value": { "status": 422, "code": "UNNECESSARY_IDENTIFIER", "message": "The device is already identified by the access token." } }, "GENERIC_422_UNSUPPORTED_IDENTIFIER": { "description": "None of the provided identifiers is supported by the implementation", "value": { "status": 422, "code": "UNSUPPORTED_IDENTIFIER", "message": "The identifier provided is not supported." } }, "GENERIC_422_SERVICE_NOT_APPLICABLE": { "description": "Service not applicable for the provided identifier", "value": { "status": 422, "code": "SERVICE_NOT_APPLICABLE", "message": "The service is not available for the provided identifier." } }, "GENERIC_422_MISSING_IDENTIFIER": { "description": "An identifier is not included in the request and the device or phone number identification cannot be derived from the 3-legged access token", "value": { "status": 422, "code": "MISSING_IDENTIFIER", "message": "The device cannot be identified." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 422 ] }, "code": { "enum": [ "SERVICE_NOT_APPLICABLE", "MISSING_IDENTIFIER", "UNSUPPORTED_IDENTIFIER", "UNNECESSARY_IDENTIFIER" ] } } } ] } } }, "description": "" }, "429": { "content": { "application/json": { "examples": { "GENERIC_429_QUOTA_EXCEEDED": { "description": "Request is rejected due to exceeding a business quota limit", "value": { "status": 429, "code": "QUOTA_EXCEEDED", "message": "Out of resource quota." } }, "GENERIC_429_TOO_MANY_REQUESTS": { "description": "Access to the API has been temporarily blocked due to rate or spike arrest limits being reached", "value": { "status": 429, "code": "TOO_MANY_REQUESTS", "message": "Rate limit reached." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 429 ] }, "code": { "enum": [ "QUOTA_EXCEEDED", "TOO_MANY_REQUESTS" ] } } } ] } } }, "description": "" }, "503": { "content": { "application/json": { "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": "Network issue" } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 503 ] }, "code": { "enum": [ "UNAVAILABLE" ] } } } ] } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "DEVICE_ROAMING_TRUE": { "value": { "device": { "phoneNumber": "+99999991000" } } }, "DEVICE_ROAMING_FALSE": { "value": { "device": { "phoneNumber": "+99999991001" } } } }, "schema": { "description": "The request for retrieving the current roaming status for the requested device.", "type": "object", "properties": { "device": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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.\n", "type": "object", "properties": { "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}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 } } } } }, "description": "" } } }, "/oauth2/v1/auth/clientcredentials": { "get": { "tags": [ "NaC Authorization Server" ], "summary": "Endpoint for getting client credentials to user", "operationId": "get_client_credentials", "description": "Getting client credentials for user. If it exists that is returned, otherwise new created.", "responses": { "200": { "content": { "application/json": { "examples": { "Example_1": { "value": { "client_id": "", "client_secret": "" } } }, "schema": { "properties": { "client_id": { "type": "string", "maxLength": 50, "title": "Client Id", "description": "The unique client_id string as issued by the authorization server." }, "client_secret": { "type": "string", "maxLength": 50, "title": "Client Secret", "description": "The client_secret corresponding to the client_id." } }, "type": "object", "required": [ "client_id", "client_secret" ], "title": "ClientCredential" } } }, "description": "" } }, "parameters": [ { "$ref": "#/components/parameters/x-rapidapi-host" } ] } }, "/passthrough/camara/v1/call-forwarding-signal/call-forwarding-signal/v0.3/call-forwardings": { "post": { "tags": [ "Call Forwarding Signal v0.3.0" ], "summary": "Retrieve the information about the type of call forwarding service active on a phone number (PhoneNumber)", "parameters": [ { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": { "type": "string", "pattern": "^[a-zA-Z0-9-]{0,55}$", "default": "b4333c46-49c0-4f62-80d7-f0ef930f1c46" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "retrieveCallForwarding", "description": "This endpoint provides information about wich type of call forwarding service is active. More than one service can be active, e.g. conditional and unconditional. This endpoit exceeds the main scope of the CFS API, for this reason an error code 501 can be returned.", "responses": { "200": { "content": { "application/json": { "examples": { "Example_1": { "value": [ "unconditional", "conditional_busy", "conditional_no_answer" ] } }, "schema": { "description": "resource containing the list of the Call Forwarding Services active for the given phone number (PhoneNumber). The possible states are, 'inactive' (no call forwarding service activated), 'unconditional' (call forwarded independently from the device status), 'conditional_busy' (call forwarded if the device is on an active call), 'conditional_not_reachable' (call forwarded if the device is not reachable), 'conditional_no_answer' (call forwarded if the device doesn't answer the incoming call).", "type": "array", "items": { "type": "string", "enum": [ "inactive", "unconditional", "conditional_busy", "conditional_not_reachable", "conditional_no_answer" ] }, "minItems": 1 } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "GENERIC_400_INVALID_ARGUMENT": { "description": "Invalid Argument. Generic Syntax Exception", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param." } } }, "schema": { "allOf": [ { "description": "error info template", "type": "object", "required": [ "message", "status", "code" ], "properties": { "message": { "type": "string", "description": "A human readable description of what the event represent" }, "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "Friendly Code to describe the error" } } }, { "type": "object", "properties": { "status": { "enum": [ 400 ] }, "code": { "enum": [ "INVALID_ARGUMENT" ] } } } ] } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "GENERIC_401_AUTHENTICATION_REQUIRED": { "description": "New authentication is needed, authentication is no longer valid", "value": { "status": 401, "code": "AUTHENTICATION_REQUIRED", "message": "New authentication is required." } }, "GENERIC_401_UNAUTHENTICATED": { "description": "Request cannot be authenticated", "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials." } } }, "schema": { "allOf": [ { "description": "error info template", "type": "object", "required": [ "message", "status", "code" ], "properties": { "message": { "type": "string", "description": "A human readable description of what the event represent" }, "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "Friendly Code to describe the error" } } }, { "type": "object", "properties": { "status": { "enum": [ 401 ] }, "code": { "enum": [ "UNAUTHENTICATED", "AUTHENTICATION_REQUIRED" ] } } } ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "GENERIC_403_PERMISSION_DENIED": { "description": "Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security", "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action." } } }, "schema": { "allOf": [ { "description": "error info template", "type": "object", "required": [ "message", "status", "code" ], "properties": { "message": { "type": "string", "description": "A human readable description of what the event represent" }, "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "Friendly Code to describe the error" } } }, { "type": "object", "properties": { "status": { "enum": [ 403 ] }, "code": { "enum": [ "PERMISSION_DENIED" ] } } } ] } } }, "description": "" }, "404": { "content": { "application/json": { "examples": { "GENERIC_404_IDENTIFIER_NOT_FOUND": { "description": "Call forwarding check can't be done because the phone number is unknown.", "value": { "status": 404, "code": "IDENTIFIER_NOT_FOUND", "message": "Device identifier not found." } }, "GENERIC_404_NOT_FOUND": { "description": "Resource is not found", "value": { "status": 404, "code": "NOT_FOUND", "message": "The specified resource is not found." } } }, "schema": { "allOf": [ { "description": "error info template", "type": "object", "required": [ "message", "status", "code" ], "properties": { "message": { "type": "string", "description": "A human readable description of what the event represent" }, "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "Friendly Code to describe the error" } } }, { "type": "object", "properties": { "status": { "enum": [ 404 ] }, "code": { "enum": [ "NOT_FOUND", "IDENTIFIER_NOT_FOUND" ] } } } ] } } }, "description": "" }, "422": { "content": { "application/json": { "examples": { "GENERIC_422_UNNECESSARY_IDENTIFIER": { "description": "An explicit identifier is provided when a device or phone number has already been identified from the access token", "value": { "status": 422, "code": "UNNECESSARY_IDENTIFIER", "message": "The phone number is already identified by the access token." } }, "GENERIC_422_MISSING_IDENTIFIER": { "description": "An identifier is not included in the request and the device or phone number identification cannot be derived from the 3-legged access token", "value": { "status": 422, "code": "MISSING_IDENTIFIER", "message": "The phone number cannot be identified." } }, "GENERIC_422_SERVICE_NOT_APPLICABLE": { "description": "Service not applicable for the provided identifier", "value": { "status": 422, "code": "SERVICE_NOT_APPLICABLE", "message": "The service is not available for the provided identifier." } } }, "schema": { "allOf": [ { "description": "error info template", "type": "object", "required": [ "message", "status", "code" ], "properties": { "message": { "type": "string", "description": "A human readable description of what the event represent" }, "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "Friendly Code to describe the error" } } }, { "type": "object", "properties": { "status": { "enum": [ 422 ] }, "code": { "enum": [ "SERVICE_NOT_APPLICABLE", "MISSING_IDENTIFIER", "UNNECESSARY_IDENTIFIER" ] } } } ] } } }, "description": "" }, "429": { "content": { "application/json": { "examples": { "GENERIC_429_TOO_MANY_REQUESTS": { "description": "Access to the API has been temporarily blocked due to rate or spike arrest limits being reached", "value": { "status": 429, "code": "TOO_MANY_REQUESTS", "message": "Rate limit reached." } }, "GENERIC_429_QUOTA_EXCEEDED": { "description": "Request is rejected due to exceeding a business quota limit", "value": { "status": 429, "code": "QUOTA_EXCEEDED", "message": "Out of resource quota." } } }, "schema": { "allOf": [ { "description": "error info template", "type": "object", "required": [ "message", "status", "code" ], "properties": { "message": { "type": "string", "description": "A human readable description of what the event represent" }, "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "Friendly Code to describe the error" } } }, { "type": "object", "properties": { "status": { "enum": [ 429 ] }, "code": { "enum": [ "QUOTA_EXCEEDED", "TOO_MANY_REQUESTS" ] } } } ] } } }, "description": "" }, "501": { "content": { "application/json": { "examples": { "GENERIC_501_NOT_IMPLEMENTED": { "description": "Service not implemented. The use of this code should be avoided as far as possible to get the objective to reach aligned implementations", "value": { "status": 501, "code": "NOT_IMPLEMENTED", "message": "This functionality is not implemented yet." } } }, "schema": { "allOf": [ { "description": "error info template", "type": "object", "required": [ "message", "status", "code" ], "properties": { "message": { "type": "string", "description": "A human readable description of what the event represent" }, "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "Friendly Code to describe the error" } } }, { "type": "object", "properties": { "status": { "enum": [ 501 ] }, "code": { "enum": [ "NOT_IMPLEMENTED" ] } } } ] } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "CALLFORWARDING_SETTINGs_ACTIVE": { "description": "Verify if a subscription identified by a phone number has call forwardings settings enabled", "value": { "phoneNumber": "+99999991111" } }, "CALLFORWARDING_SETTINGs_INACTIVE": { "description": "Verify if a subscription identified by a phone number has call forwarding settings disenabled", "value": { "phoneNumber": "+99999991001" } } }, "schema": { "description": "resource containing the phone number (PhoneNumber) regarding which the Call Forwarding Service must be checked. To be valorised only in case of two-legged authentication. If valorised with three-legged authentication a 422-UNNECESSARY_IDENTIFIER error code is returned.", "type": "object", "properties": { "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}$" } } } } }, "description": "" } } }, "/passthrough/camara/v1/kyc-match/kyc-match/v0.3/match": { "post": { "tags": [ "KYC Match v0.3" ], "summary": "Matching a customer identity by checking a set of attributes related against the account data bound to their phone number.", "parameters": [ { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": { "type": "string", "pattern": "^[a-zA-Z0-9-]{0,55}$", "default": "b4333c46-49c0-4f62-80d7-f0ef930f1c46" } }, { "name": "authorization", "in": "header", "required": false, "description": "authorization header for token", "schema": { "type": "string" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "verifyKYCMatch", "description": "Verify matching of a number of attributes related to a customer identity against the verified data bound to their phone number in the Operator systems. Regardless of whether the `phoneNumber` is explicitly stated in the request body, at least one of the other fields must be provided, otherwise a `HTTP 400 - KNOW_YOUR_CUSTOMER.INVALID_PARAM_COMBINATION` error will be returned.\n\nIn order to proceed with the match check, some Operators may have the requirement to perform an additional level of validation based on the `idDocument` property. This means that, in those cases, the `idDocument` is required and the provided value needs to match the one stored in the Operator system associated with the indicated `phoneNumber`. This validation will be done before proceeding with the match check of the rest of the properties. The following two rules apply only in the cases where the Operator have the requirement to validate the `idDocument`:\n- If no `idDocument` is provided, then a `HTTP 403 - KNOW_YOUR_CUSTOMER.ID_DOCUMENT_REQUIRED` error will be returned.\n- If the provided `idDocument` does not match the one stored in the Operator systems, then a `HTTP 403 - KNOW_YOUR_CUSTOMER.ID_DOCUMENT_MISMATCH` error will be returned.\n\nThe API will return the result of the matching process for each requested attribute. This means that the response will **only** contain the attributes for which validation has been requested. Possible values are:\n\n\n\n\n\n - **true**: the attribute provided matches with the one in the Operator systems.\n - **false**: the attribute provided does not match with the one in the Operator systems.\n - **not_available**: the attribute is not available to validate.", "responses": { "200": { "content": { "application/json": { "examples": { "KYC_Match200Example": { "value": { "idDocumentMatch": "true", "nameMatch": "true", "givenNameMatch": "not_available", "familyNameMatch": "not_available", "nameKanaHankakuMatch": "true", "nameKanaZenkakuMatch": "false", "middleNamesMatch": "true", "familyNameAtBirthMatch": "false", "familyNameAtBirthMatchScore": 90, "addressMatch": "true", "streetNameMatch": "true", "streetNumberMatch": "true", "postalCodeMatch": "true", "regionMatch": "true", "localityMatch": "not_available", "countryMatch": "true", "houseNumberExtensionMatch": "not_available", "birthdateMatch": "false", "emailMatch": "false", "emailMatchScore": 87, "genderMatch": "false" } } }, "schema": { "type": "object", "properties": { "idDocumentMatch": { "oneOf": [ { "type": "string", "enum": [ "true", "false", "not_available" ] }, { "description": "Indicates whether Id number associated to the ID document of the customer matches with the one on the Operator's system." } ] }, "nameMatch": { "oneOf": [ { "type": "string", "enum": [ "true", "false", "not_available" ] }, { "description": "Indicates whether the complete name of the customer matches with the one on the Operator's system." } ] }, "nameMatchScore": { "type": "integer", "description": "Indicates the similarity score assigned to the input value when it does not exactly match the value stored in the operator's system. This property shall only be returned when the value of the corresponding match field is `false`.", "minimum": 0, "maximum": 100 }, "givenNameMatch": { "oneOf": [ { "type": "string", "enum": [ "true", "false", "not_available" ] }, { "description": "Indicates whether First name/given name of the customer matches with the one on the Operator's system." } ] }, "givenNameMatchScore": { "type": "integer", "description": "Indicates the similarity score assigned to the input value when it does not exactly match the value stored in the operator's system. This property shall only be returned when the value of the corresponding match field is `false`.", "minimum": 0, "maximum": 100 }, "familyNameMatch": { "oneOf": [ { "type": "string", "enum": [ "true", "false", "not_available" ] }, { "description": "Indicates whether last name/ family name/ surname of the customer matches with the one on the Operator's system." } ] }, "familyNameMatchScore": { "type": "integer", "description": "Indicates the similarity score assigned to the input value when it does not exactly match the value stored in the operator's system. This property shall only be returned when the value of the corresponding match field is `false`.", "minimum": 0, "maximum": 100 }, "nameKanaHankakuMatch": { "oneOf": [ { "type": "string", "enum": [ "true", "false", "not_available" ] }, { "description": "Indicates whether complete name of the customer in Hankaku-Kana format (reading of name) for Japan matches with the one on the Operator's system." } ] }, "nameKanaHankakuMatchScore": { "type": "integer", "description": "Indicates the similarity score assigned to the input value when it does not exactly match the value stored in the operator's system. This property shall only be returned when the value of the corresponding match field is `false`.", "minimum": 0, "maximum": 100 }, "nameKanaZenkakuMatch": { "oneOf": [ { "type": "string", "enum": [ "true", "false", "not_available" ] }, { "description": "Indicates whether complete name of the customer in Zenkaku-Kana format (reading of name) for Japan matches with the one on the Operator's system." } ] }, "nameKanaZenkakuMatchScore": { "type": "integer", "description": "Indicates the similarity score assigned to the input value when it does not exactly match the value stored in the operator's system. This property shall only be returned when the value of the corresponding match field is `false`.", "minimum": 0, "maximum": 100 }, "middleNamesMatch": { "oneOf": [ { "type": "string", "enum": [ "true", "false", "not_available" ] }, { "description": "Indicates whether the middle names of the customer matches with the one on the Operator's system." } ] }, "middleNamesMatchScore": { "type": "integer", "description": "Indicates the similarity score assigned to the input value when it does not exactly match the value stored in the operator's system. This property shall only be returned when the value of the corresponding match field is `false`.", "minimum": 0, "maximum": 100 }, "familyNameAtBirthMatch": { "oneOf": [ { "type": "string", "enum": [ "true", "false", "not_available" ] }, { "description": "Indicates whether the Family Name At Birth of the customer matches with the one on the Operator's system." } ] }, "familyNameAtBirthMatchScore": { "type": "integer", "description": "Indicates the similarity score assigned to the input value when it does not exactly match the value stored in the operator's system. This property shall only be returned when the value of the corresponding match field is `false`.", "minimum": 0, "maximum": 100 }, "addressMatch": { "oneOf": [ { "type": "string", "enum": [ "true", "false", "not_available" ] }, { "description": "Indicates whether complete address of the customer matches with the one on the Operator's system." } ] }, "addressMatchScore": { "type": "integer", "description": "Indicates the similarity score assigned to the input value when it does not exactly match the value stored in the operator's system. This property shall only be returned when the value of the corresponding match field is `false`.", "minimum": 0, "maximum": 100 }, "streetNameMatch": { "oneOf": [ { "type": "string", "enum": [ "true", "false", "not_available" ] }, { "description": "Indicates whether the street name of the customer matches with the one on the Operator's system." } ] }, "streetNameMatchScore": { "type": "integer", "description": "Indicates the similarity score assigned to the input value when it does not exactly match the value stored in the operator's system. This property shall only be returned when the value of the corresponding match field is `false`.", "minimum": 0, "maximum": 100 }, "streetNumberMatch": { "oneOf": [ { "type": "string", "enum": [ "true", "false", "not_available" ] }, { "description": "Indicates whether the street number of the customer matches with the one on the Operator's system." } ] }, "streetNumberMatchScore": { "type": "integer", "description": "Indicates the similarity score assigned to the input value when it does not exactly match the value stored in the operator's system. This property shall only be returned when the value of the corresponding match field is `false`.", "minimum": 0, "maximum": 100 }, "postalCodeMatch": { "oneOf": [ { "type": "string", "enum": [ "true", "false", "not_available" ] }, { "description": "Indicates whether the postal code / zip code of the customer matches with the one on the Operator's system." } ] }, "regionMatch": { "oneOf": [ { "type": "string", "enum": [ "true", "false", "not_available" ] }, { "description": "Indicates whether the region of the customer's address matches with the one on the Operator's system." } ] }, "regionMatchScore": { "type": "integer", "description": "Indicates the similarity score assigned to the input value when it does not exactly match the value stored in the operator's system. This property shall only be returned when the value of the corresponding match field is `false`.", "minimum": 0, "maximum": 100 }, "localityMatch": { "oneOf": [ { "type": "string", "enum": [ "true", "false", "not_available" ] }, { "description": "Indicates whether the locality of the customer's address matches with the one on the Operator's system." } ] }, "localityMatchScore": { "type": "integer", "description": "Indicates the similarity score assigned to the input value when it does not exactly match the value stored in the operator's system. This property shall only be returned when the value of the corresponding match field is `false`.", "minimum": 0, "maximum": 100 }, "countryMatch": { "oneOf": [ { "type": "string", "enum": [ "true", "false", "not_available" ] }, { "description": "Indicates whether the country of the customer's address matches with the one on the Operator's system." } ] }, "houseNumberExtensionMatch": { "oneOf": [ { "type": "string", "enum": [ "true", "false", "not_available" ] }, { "description": "Indicates whether the house number extension of the customer's address with the one on the Operator's system." } ] }, "birthdateMatch": { "oneOf": [ { "type": "string", "enum": [ "true", "false", "not_available" ] }, { "description": "Indicates whether the birthdate of the customer matches with the one on the Operator's system." } ] }, "emailMatch": { "oneOf": [ { "type": "string", "enum": [ "true", "false", "not_available" ] }, { "description": "Indicates whether the email address of the customer matches with the one on the Operator's system." } ] }, "emailMatchScore": { "type": "integer", "description": "Indicates the similarity score assigned to the input value when it does not exactly match the value stored in the operator's system. This property shall only be returned when the value of the corresponding match field is `false`.", "minimum": 0, "maximum": 100 }, "genderMatch": { "oneOf": [ { "type": "string", "enum": [ "true", "false", "not_available" ] }, { "description": "Indicates whether the gender of the customer matches with the one on the Operator's system." } ] } } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "KNOW_YOUR_CUSTOMER.INVALID_PARAM_COMBINATION": { "description": "Indicated param combination is invalid", "value": { "status": 400, "code": "KNOW_YOUR_CUSTOMER.INVALID_PARAM_COMBINATION", "message": "Indicated parameter combination is invalid" } }, "GENERIC_400_INVALID_ARGUMENT": { "description": "Invalid Argument. Generic Syntax Exception", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 400 ] }, "code": { "enum": [ "INVALID_ARGUMENT", "KNOW_YOUR_CUSTOMER.INVALID_PARAM_COMBINATION" ] } } } ] } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "GENERIC_401_AUTHENTICATION_REQUIRED": { "description": "New authentication is needed, authentication is no longer valid", "value": { "status": 401, "code": "AUTHENTICATION_REQUIRED", "message": "New authentication is required." } }, "GENERIC_401_UNAUTHENTICATED": { "description": "Request cannot be authenticated", "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 401 ] }, "code": { "enum": [ "UNAUTHENTICATED", "AUTHENTICATION_REQUIRED" ] } } } ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "GENERIC_403_PERMISSION_DENIED": { "description": "Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security", "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action." } }, "KNOW_YOUR_CUSTOMER.ID_DOCUMENT_REQUIRED": { "description": "The idDocument is required by the implementation", "value": { "status": 403, "code": "KNOW_YOUR_CUSTOMER.ID_DOCUMENT_REQUIRED", "message": "The idDocument is required to perform the properties validation" } }, "GENERIC_403_INVALID_TOKEN_CONTEXT": { "description": "Reflect some inconsistency between information in some field of the API and the related OAuth2 Token", "value": { "status": 403, "code": "INVALID_TOKEN_CONTEXT", "message": "phoneNumber is not consistent with access token." } }, "KNOW_YOUR_CUSTOMER.ID_DOCUMENT_MISMATCH": { "description": "idDocument mismatch", "value": { "status": 403, "code": "KNOW_YOUR_CUSTOMER.ID_DOCUMENT_MISMATCH", "message": "The idDocument needs to match the one associated with the provided phoneNumber" } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 403 ] }, "code": { "enum": [ "PERMISSION_DENIED", "INVALID_TOKEN_CONTEXT", "KNOW_YOUR_CUSTOMER.ID_DOCUMENT_REQUIRED", "KNOW_YOUR_CUSTOMER.ID_DOCUMENT_MISMATCH" ] } } } ] } } }, "description": "" }, "404": { "content": { "application/json": { "examples": { "GENERIC_404_NOT_FOUND": { "description": "Resource is not found", "value": { "status": 404, "code": "NOT_FOUND" } }, "GENERIC_404_IDENTIFIER_NOT_FOUND": { "description": "The phone number is not associated with a CSP customer account", "value": { "status": 404, "code": "IDENTIFIER_NOT_FOUND", "message": "The phone number provided is not associated with a customer account" } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 404 ] }, "code": { "enum": [ "NOT_FOUND", "IDENTIFIER_NOT_FOUND" ] } } } ] } } }, "description": "" }, "422": { "content": { "application/json": { "examples": { "GENERIC_422_MISSING_IDENTIFIER": { "description": "No phone number has been provided either explicitly or associated with the access token", "value": { "status": 422, "code": "MISSING_IDENTIFIER", "message": "No phone number has been provided" } }, "GENERIC_422_SERVICE_NOT_APPLICABLE": { "description": "Service is not applicable for the provided phone number", "value": { "status": 422, "code": "SERVICE_NOT_APPLICABLE", "message": "The service is not applicable for the provided phone number" } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 422 ] }, "code": { "enum": [ "SERVICE_NOT_APPLICABLE", "MISSING_IDENTIFIER" ] } } } ] } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "KYC_MATCH": { "value": { "phoneNumber": "+99999991000", "idDocument": "66666666q", "name": "Anna Zoltan", "givenName": "Zoltan", "familyName": "Eszter", "familyNameAtBirth": "1994", "address": "Budapest, Bókay János u. 36-42, 1083 Hungary", "streetName": "Bókay János u", "streetNumber": "36-42", "postalCode": "1083", "region": "Budapest", "locality": "Budapest, Bókay János u. 36-42, 1080 Hungary", "country": "HU", "birthdate": "1995-03-12", "email": "device@testcsp.com" } }, "KYC_NOT_MATCH": { "value": { "phoneNumber": "+99999991001", "idDocument": "666666666", "name": "Kevin", "givenName": "AnnaZoltan", "familyName": "Ester", "familyNameAtBirth": "1994", "address": "Budapest, Bókay János u. 36-44, 1080 Hungary", "streetName": "Bókay", "streetNumber": "36-44", "postalCode": "1080", "region": "Budapest", "locality": "Budapest, Bókay János u. 36-44, 1080 Hungary", "country": "HU", "birthdate": "1995-04-11", "email": "devicebd@testcsp.com" } }, "KYC_NOT_AVAILABLE": { "value": { "phoneNumber": "+99999991001", "idDocument": "666666666", "name": "Kevin", "givenName": "AnnaZoltan", "familyName": "Ester", "nameKanaHankaku": "federica", "nameKanaZenkaku": "Federica", "middleNames": "Sanchez", "houseNumberExtension": "VVVV", "gender": "OTHER", "familyNameAtBirth": "1994", "address": "Budapest, Bókay János u. 36-44, 1080 Hungary", "streetName": "Bókay", "streetNumber": "36-44", "postalCode": "1080", "region": "Budapest", "locality": "Budapest, Bókay János u. 36-44, 1080 Hungary", "country": "HU", "birthdate": "1995-04-11", "email": "devicebd@testcsp.com" } }, "KYC_MATCH_3_LEGGED_FLOW": { "value": { "idDocument": "66666666q", "name": "Anna Zoltan", "givenName": "Zoltan", "familyName": "Eszter", "familyNameAtBirth": "1994", "nameKanaHankaku": "federica", "nameKanaZenkaku": "Federica", "middleNames": "Sanchez", "address": "Tokyo-to Chiyoda-ku Iidabashi 3-10-10", "streetName": "Nicolas Salmeron", "streetNumber": "4", "postalCode": "1080", "region": "Budapest", "locality": "Budapest, Bókay János u. 36-42, 1080 Hungary", "country": "HU", "birthdate": "1995-03-12", "email": "device@testcsp.com", "houseNumberExtension": "VVVV", "gender": "MALE" } } }, "schema": { "type": "object", "description": "Payload to validate the customer data.", "properties": { "phoneNumber": { "type": "string", "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 '+'.", "pattern": "^\\+[1-9][0-9]{4,14}$" }, "idDocument": { "type": "string", "description": "Id number associated to the official identity document in the country. It may contain alphanumeric characters." }, "name": { "type": "string", "description": "Complete name of the customer, usually composed of first/given name and last/family/sur- name in a country. Depending on the country, the order of first/give name and last/family/sur- name varies, and middle name could be included. It can use givenName, middleNames, familyName and/or familyNameAtBirth. For example, in ESP, name+familyName; in NLD, it can be name+middleNames+familyName or name+middleNames+familyNameAtBirth, etc." }, "givenName": { "type": "string", "description": "First/given name or compound first/given name of the customer." }, "familyName": { "type": "string", "description": "Last name, family name, or surname of the customer." }, "nameKanaHankaku": { "type": "string", "description": "Complete name of the customer in Hankaku-Kana format (reading of name) for Japan." }, "nameKanaZenkaku": { "type": "string", "description": "Complete name of the customer in Zenkaku-Kana format (reading of name) for Japan." }, "middleNames": { "type": "string", "description": "Middle name/s of the customer." }, "familyNameAtBirth": { "type": "string", "description": "Last/family/sur- name at birth of the customer." }, "address": { "type": "string", "description": "Complete address of the customer. For some countries, it is built following the usual concatenation of parameters in a country, but for other countries, this is not the case. For some countries, it can use streetName, streetNumber and/or houseNumberExtension. For example, in ESP, streetName+streetNumber; in NLD, it can be streetName+streetNumber or streetName+streetNumber+houseNumberExtension." }, "streetName": { "type": "string", "description": "Name of the street of the customer's address. It should not include the type of the street." }, "streetNumber": { "type": "string", "description": "The street number of the customer's address. Number identifying a specific property on the 'streetName'." }, "postalCode": { "type": "string", "description": "Zip code or postal code" }, "region": { "type": "string", "description": "Region/prefecture of the customer's address" }, "locality": { "type": "string", "description": "Locality of the customer's address" }, "country": { "type": "string", "description": "Country of the customer's address. Format ISO 3166-1 alpha-2" }, "houseNumberExtension": { "type": "string", "description": "Specific identifier of the house needed depending on the property type. For example, number of apartment in an apartment building." }, "birthdate": { "type": "string", "format": "date", "description": "The birthdate of the customer, in RFC 3339 / ISO 8601 calendar date format (YYYY-MM-DD)." }, "email": { "type": "string", "format": "email", "description": "Email address of the customer in the RFC specified format (local-part@domain)." }, "gender": { "type": "string", "description": "Gender of the customer (Male/Female/Other).", "enum": [ "MALE", "FEMALE", "OTHER" ] } } } } }, "description": "" } } }, "/.well-known/security.txt": { "get": { "tags": [ "Well Known Metadata" ], "summary": "Get Security Txt", "operationId": "get_security_txt_security_txt_get", "description": " ", "responses": { "200": { "content": { "text/plain": { "examples": { "Example_1": { "value": {} } }, "schema": { "type": "string" } } }, "description": "" } }, "parameters": [ { "$ref": "#/components/parameters/x-rapidapi-host" } ] } }, "/qod/v0/retrieve-sessions": { "post": { "tags": [ "Quality-of-Service on Demand v0.10.1" ], "summary": "Retrieve sessions for a specific device", "operationId": "retrieveSessions", "description": "Return all QoD sessions related to the specified device.", "responses": { "200": { "content": { "application/json": { "examples": { "Example_1": { "value": [ { "device": { "phoneNumber": "123456789", "networkAccessIdentifier": "123456789@domain.com", "ipv4Address": { "publicAddress": "84.125.93.10", "privateAddress": "84.125.93.10", "publicPort": 0 }, "ipv6Address": "2001:db8:85a3:8d3:1319:8a2e:370:7344" }, "applicationServer": { "ipv4Address": "192.168.0.1/24", "ipv6Address": "2001:db8:85a3:8d3:1319:8a2e:370:7344" }, "devicePorts": { "ranges": [ { "from": 0, "to": 0 } ], "ports": [] }, "applicationServerPorts": { "ranges": [ { "from": 0, "to": 0 } ], "ports": [] }, "qosProfile": "QCI_1_voice", "webhook": { "notificationUrl": "https://application-server.com", "notificationAuthToken": "c8974e592c2fa383d4a3960714" }, "sessionId": "", "duration": 86400, "startedAt": 1639479600, "expiresAt": 1639566000, "qosStatus": "REQUESTED", "messages": [ { "severity": "INFO", "description": "" } ] } ] } }, "schema": { "items": { "description": "Session related information.", "allOf": [ { "description": "Common attributes of a QoD session", "type": "object", "properties": { "device": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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\n", "type": "object", "properties": { "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, optionally prefixed with '+'.", "type": "string", "pattern": "^\\+?[0-9]{5,15}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n\nThe session shall apply to all IP flows between the device subnet and the specified application server, unless further restricted by the optional parameters devicePorts or applicationServerPorts.\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 }, "applicationServer": { "description": "A server hosting backend applications to deliver some business logic to clients.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n", "type": "object", "properties": { "ipv4Address": { "type": "string", "description": "IPv4 address may be specified in form
as:\n - address - an IPv4 number in dotted-quad form 1.2.3.4. Only this exact IP number will match the flow control rule.\n - address/mask - an IP number as above with a mask width of the form 1.2.3.4/24.\n In this case, all IP numbers from 1.2.3.0 to 1.2.3.255 will match. The bit width MUST be valid for the IP version.\n" }, "ipv6Address": { "type": "string", "description": "IPv6 address may be specified in form
as:\n - address - The /128 subnet is optional for single addresses:\n - 2001:db8:85a3:8d3:1319:8a2e:370:7344\n - 2001:db8:85a3:8d3:1319:8a2e:370:7344/128\n - address/mask - an IP v6 number with a mask:\n - 2001:db8:85a3:8d3::0/64\n - 2001:db8:85a3:8d3::/64\n" } }, "minProperties": 1 }, "devicePorts": { "description": "The ports used locally by the device for flows to which the requested QoS profile should apply. If omitted, then the qosProfile will apply to all flows between the device and the specified application server address and ports", "allOf": [ { "type": "object", "minProperties": 1, "properties": { "ranges": { "type": "array", "minItems": 1, "items": { "type": "object", "required": [ "from", "to" ], "properties": { "from": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 }, "to": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } }, "ports": { "type": "array", "minItems": 1, "items": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } } ] }, "applicationServerPorts": { "description": "A list of single ports or port ranges on the application server", "allOf": [ { "type": "object", "minProperties": 1, "properties": { "ranges": { "type": "array", "minItems": 1, "items": { "type": "object", "required": [ "from", "to" ], "properties": { "from": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 }, "to": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } }, "ports": { "type": "array", "minItems": 1, "items": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } } } } ] }, "qosProfile": { "description": "A unique name for identifying a specific QoS profile.\nThis may follow different formats depending on the service providers implementation.\nSome options addresses:\n\n\n\n\n\n - A UUID style string\n - Support for predefined profiles QOS_S, QOS_M, QOS_L, and QOS_E\n - A searchable descriptive name\n", "type": "string", "minLength": 3, "maxLength": 256, "format": "string", "pattern": "^[a-zA-Z0-9_.-]+$" }, "webhook": { "type": "object", "required": [ "notificationUrl" ], "properties": { "notificationUrl": { "type": "string", "format": "uri", "description": "Allows asynchronous delivery of session related events" }, "notificationAuthToken": { "type": "string", "minLength": 20, "maxLength": 256, "description": "Authentication token for callback API" } } } }, "required": [ "device", "applicationServer", "qosProfile" ] }, { "type": "object", "properties": { "sessionId": { "description": "Session ID in UUID format", "type": "string", "format": "uuid" }, "duration": { "type": "integer", "format": "int32", "minimum": 1, "maximum": 2147483647 }, "startedAt": { "type": "integer", "description": "Timestamp of session start in seconds since Unix epoch", "format": "int64", "minimum": -9223372036854776000, "maximum": 9223372036854776000 }, "expiresAt": { "type": "integer", "description": "Timestamp of session expiration if the session was not deleted, in seconds since Unix epoch", "format": "int64", "minimum": -9223372036854776000, "maximum": 9223372036854776000 }, "qosStatus": { "description": "The current status of the requested QoS session. The status can be one of the following:\n* `REQUESTED` - QoS has been requested by creating a session\n* `AVAILABLE` - The requested QoS has been provided by the network\n* `UNAVAILABLE` - The requested QoS cannot be provided by the network due to some reason\n", "type": "string", "enum": [ "REQUESTED", "AVAILABLE", "UNAVAILABLE" ] }, "messages": { "type": "array", "items": { "type": "object", "properties": { "severity": { "description": "Message severity", "type": "string", "enum": [ "INFO", "WARNING" ] }, "description": { "description": "Detailed message text", "type": "string" } }, "required": [ "severity", "description" ] } } }, "required": [ "sessionId", "duration", "startedAt", "expiresAt", "qosStatus" ] } ] }, "type": "array", "title": "Response Retrievesessions" } } }, "description": "" }, "422": { "content": { "application/json": { "examples": { "Example_1": { "value": { "detail": [ { "loc": [], "msg": "", "type": "" } ] } } }, "schema": { "properties": { "detail": { "items": { "properties": { "loc": { "items": { "anyOf": [ { "type": "string" }, { "type": "integer" } ] }, "type": "array", "title": "Location" }, "msg": { "type": "string", "title": "Message" }, "type": { "type": "string", "title": "Error Type" } }, "type": "object", "required": [ "loc", "msg", "type" ], "title": "ValidationError" }, "type": "array", "title": "Detail" } }, "type": "object", "title": "HTTPValidationError" } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "QOS_RETRIEVE_SESSION_PHONE_NUMBER": { "value": { "device": { "phoneNumber": "+99999991001" } } } }, "schema": { "properties": { "device": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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\n", "type": "object", "properties": { "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, optionally prefixed with '+'.", "type": "string", "pattern": "^\\+?[0-9]{5,15}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n\nThe session shall apply to all IP flows between the device subnet and the specified application server, unless further restricted by the optional parameters devicePorts or applicationServerPorts.\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 } }, "type": "object", "required": [ "device" ], "title": "RetrieveSessionInput" } } }, "description": "" }, "parameters": [ { "$ref": "#/components/parameters/x-rapidapi-host" } ] } }, "/passthrough/camara/v1/call-forwarding-signal/call-forwarding-signal/v0.3/unconditional-call-forwardings": { "post": { "tags": [ "Call Forwarding Signal v0.3.0" ], "summary": "Retrieve the information about the status of the unconditional call forwarding service on a phone number (PhoneNumber)", "parameters": [ { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": { "type": "string", "pattern": "^[a-zA-Z0-9-]{0,55}$", "default": "b4333c46-49c0-4f62-80d7-f0ef930f1c46" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "retrieveUnconditionalCallForwarding", "description": "This endpoint provides information about the status of the unconditional call forwarding, beeing active or not.", "responses": { "200": { "content": { "application/json": { "examples": { "Example_1": { "value": { "active": true } } }, "schema": { "description": "resource containing the information about the Unconditional Call Forwarding Service for the given phone number (PhoneNumber)", "type": "object", "properties": { "active": { "type": "boolean", "description": "Indicates if the unconditional call forwarding service is active." } } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "GENERIC_400_INVALID_ARGUMENT": { "description": "Invalid Argument. Generic Syntax Exception", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param." } } }, "schema": { "allOf": [ { "description": "error info template", "type": "object", "required": [ "message", "status", "code" ], "properties": { "message": { "type": "string", "description": "A human readable description of what the event represent" }, "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "Friendly Code to describe the error" } } }, { "type": "object", "properties": { "status": { "enum": [ 400 ] }, "code": { "enum": [ "INVALID_ARGUMENT" ] } } } ] } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "GENERIC_401_UNAUTHENTICATED": { "description": "Request cannot be authenticated", "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials." } }, "GENERIC_401_AUTHENTICATION_REQUIRED": { "description": "New authentication is needed, authentication is no longer valid", "value": { "status": 401, "code": "AUTHENTICATION_REQUIRED", "message": "New authentication is required." } } }, "schema": { "allOf": [ { "description": "error info template", "type": "object", "required": [ "message", "status", "code" ], "properties": { "message": { "type": "string", "description": "A human readable description of what the event represent" }, "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "Friendly Code to describe the error" } } }, { "type": "object", "properties": { "status": { "enum": [ 401 ] }, "code": { "enum": [ "UNAUTHENTICATED", "AUTHENTICATION_REQUIRED" ] } } } ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "GENERIC_403_PERMISSION_DENIED": { "description": "Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security", "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action." } } }, "schema": { "allOf": [ { "description": "error info template", "type": "object", "required": [ "message", "status", "code" ], "properties": { "message": { "type": "string", "description": "A human readable description of what the event represent" }, "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "Friendly Code to describe the error" } } }, { "type": "object", "properties": { "status": { "enum": [ 403 ] }, "code": { "enum": [ "PERMISSION_DENIED" ] } } } ] } } }, "description": "" }, "404": { "content": { "application/json": { "examples": { "GENERIC_404_NOT_FOUND": { "description": "Resource is not found", "value": { "status": 404, "code": "NOT_FOUND", "message": "The specified resource is not found." } }, "GENERIC_404_IDENTIFIER_NOT_FOUND": { "description": "Call forwarding check can't be done because the phone number is unknown.", "value": { "status": 404, "code": "IDENTIFIER_NOT_FOUND", "message": "Device identifier not found." } } }, "schema": { "allOf": [ { "description": "error info template", "type": "object", "required": [ "message", "status", "code" ], "properties": { "message": { "type": "string", "description": "A human readable description of what the event represent" }, "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "Friendly Code to describe the error" } } }, { "type": "object", "properties": { "status": { "enum": [ 404 ] }, "code": { "enum": [ "NOT_FOUND", "IDENTIFIER_NOT_FOUND" ] } } } ] } } }, "description": "" }, "422": { "content": { "application/json": { "examples": { "GENERIC_422_MISSING_IDENTIFIER": { "description": "An identifier is not included in the request and the device or phone number identification cannot be derived from the 3-legged access token", "value": { "status": 422, "code": "MISSING_IDENTIFIER", "message": "The phone number cannot be identified." } }, "GENERIC_422_SERVICE_NOT_APPLICABLE": { "description": "Service not applicable for the provided identifier", "value": { "status": 422, "code": "SERVICE_NOT_APPLICABLE", "message": "The service is not available for the provided identifier." } }, "GENERIC_422_UNNECESSARY_IDENTIFIER": { "description": "An explicit identifier is provided when a device or phone number has already been identified from the access token", "value": { "status": 422, "code": "UNNECESSARY_IDENTIFIER", "message": "The phone number is already identified by the access token." } } }, "schema": { "allOf": [ { "description": "error info template", "type": "object", "required": [ "message", "status", "code" ], "properties": { "message": { "type": "string", "description": "A human readable description of what the event represent" }, "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "Friendly Code to describe the error" } } }, { "type": "object", "properties": { "status": { "enum": [ 422 ] }, "code": { "enum": [ "SERVICE_NOT_APPLICABLE", "MISSING_IDENTIFIER", "UNNECESSARY_IDENTIFIER" ] } } } ] } } }, "description": "" }, "429": { "content": { "application/json": { "examples": { "GENERIC_429_TOO_MANY_REQUESTS": { "description": "Access to the API has been temporarily blocked due to rate or spike arrest limits being reached", "value": { "status": 429, "code": "TOO_MANY_REQUESTS", "message": "Rate limit reached." } }, "GENERIC_429_QUOTA_EXCEEDED": { "description": "Request is rejected due to exceeding a business quota limit", "value": { "status": 429, "code": "QUOTA_EXCEEDED", "message": "Out of resource quota." } } }, "schema": { "allOf": [ { "description": "error info template", "type": "object", "required": [ "message", "status", "code" ], "properties": { "message": { "type": "string", "description": "A human readable description of what the event represent" }, "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "Friendly Code to describe the error" } } }, { "type": "object", "properties": { "status": { "enum": [ 429 ] }, "code": { "enum": [ "QUOTA_EXCEEDED", "TOO_MANY_REQUESTS" ] } } } ] } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "UNCONDITIONAL_SETTING_ACTIVE": { "description": "Verify if a subscription identified by a phone number has the unconditional call forwarding setting enabled", "value": { "phoneNumber": "+99999991000" } }, "UNCONDITIONAL_SETTING_INACTIVE": { "description": "Verify if a subscription identified by a phone number has not got the unconditional call forwarding setting enabled", "value": { "phoneNumber": "+99999991001" } } }, "schema": { "description": "resource containing the phone number (PhoneNumber) regarding which the Call Forwarding Service must be checked. To be valorised only in case of two-legged authentication. If valorised with three-legged authentication a 422-UNNECESSARY_IDENTIFIER error code is returned.", "type": "object", "properties": { "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}$" } } } } }, "description": "" } } }, "/congestion-insights/v0/subscriptions/{resource_id}": { "get": { "tags": [ "Congestion Insights v1.0.0" ], "summary": "Get congestion subscription", "parameters": [ { "name": "resource_id", "in": "path", "required": true, "schema": { "type": "string", "maxLength": 36, "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$", "title": "Resource ID.", "default": "de87e438-58b4-42c3-9d49-0fbfbd878305" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "getSubscription", "description": "Get congestion subscription data of the given device.", "responses": { "200": { "content": { "application/json": { "examples": { "Example_1": { "value": { "device": { "phoneNumber": "", "networkAccessIdentifier": "", "ipv4Address": { "publicAddress": "", "privateAddress": "", "publicPort": 0 }, "ipv6Address": "" }, "webhook": { "notificationUrl": "https://application-server.com", "notificationAuthToken": "c8974e592c2fa383d4a3960714" }, "subscriptionExpireTime": "", "subscriptionId": "", "startedAt": "", "expiresAt": "" } } }, "schema": { "properties": { "device": { "properties": { "phoneNumber": { "type": "string", "maxLength": 16, "pattern": "^\\+[1-9][0-9]{4,14}$", "title": "Phonenumber", "description": "Phone number of the subscription, if any. Optional.", "nullable": true }, "networkAccessIdentifier": { "type": "string", "maxLength": 256, "pattern": "^\\S+@\\S+\\.\\S+$", "title": "Networkaccessidentifier", "description": "Email address-like external identifier of the subscription registered at the operator. If both networkAccessIdentifier and phoneNumber are included, phoneNumber may be dropped and networkAccessIdentifier may be retained.", "nullable": true }, "ipv4Address": { "allOf": [ { "properties": { "publicAddress": { "type": "string", "maxLength": 15, "title": "Publicaddress", "description": "Public IPv4 address of the device. Either of the device or the NAT the device is behind.", "nullable": true }, "privateAddress": { "type": "string", "maxLength": 15, "title": "Privateaddress", "description": "Private IPv4 address of the device, if it is behind a NAT.", "nullable": true }, "publicPort": { "type": "integer", "maximum": 65535, "minimum": 0, "format": "int32", "title": "Publicport", "description": "Public port used by the device. Port is necessary, as private address ranges overlap, and public port is used to extend the range for CGNAT.", "nullable": true } }, "type": "object", "title": "DeviceIpv4Addr" } ], "description": "IPv4 address of the device. IP address is needed for some flow-oriented services, such as QoD." }, "ipv6Address": { "type": "string", "maxLength": 45, "title": "Ipv6Address", "description": "IPv6 address of the device. IP address is needed for some flow-oriented services, such as QoD.", "nullable": true } }, "type": "object", "title": "Device" }, "webhook": { "properties": { "notificationUrl": { "type": "string", "maxLength": 256, "title": "Notificationurl", "description": "Notification URL for session-related events." }, "notificationAuthToken": { "type": "string", "maxLength": 4096, "title": "Notificationauthtoken", "description": "Authorization token for notification sending.", "nullable": true } }, "type": "object", "required": [ "notificationUrl" ], "title": "Webhook" }, "subscriptionExpireTime": { "type": "string", "format": "date-time", "title": "Subscriptionexpiretime", "description": "Time when the subscription expires." }, "subscriptionId": { "type": "string", "title": "Subscriptionid" }, "startedAt": { "type": "string", "format": "date-time", "title": "Startedat", "description": "Time when subscription started", "nullable": true }, "expiresAt": { "type": "string", "format": "date-time", "title": "Expiresat", "description": "Time when subscription will expire or expired", "nullable": true } }, "type": "object", "required": [ "device", "webhook", "subscriptionExpireTime", "subscriptionId" ], "title": "SubscriptionInfo" } } }, "description": "" }, "422": { "content": { "application/json": { "examples": { "Example_1": { "value": { "detail": [ { "loc": [], "msg": "", "type": "" } ] } } }, "schema": { "properties": { "detail": { "items": { "properties": { "loc": { "type": "array", "items": { "type": "string" }, "title": "Location" }, "msg": { "type": "string", "title": "Message" }, "type": { "type": "string", "title": "Error Type" } }, "type": "object", "required": [ "loc", "msg", "type" ], "title": "ValidationError" }, "type": "array", "title": "Detail" } }, "type": "object", "title": "HTTPValidationError" } } }, "description": "" } } }, "delete": { "tags": [ "Congestion Insights v1.0.0" ], "summary": "Unsubscribe from congestion event", "parameters": [ { "name": "resource_id", "in": "path", "required": true, "schema": { "type": "string", "maxLength": 36, "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$", "title": "Resource ID.", "default": "de87e438-58b4-42c3-9d49-0fbfbd878305" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "deleteSubscription-ConI-V1", "description": "Unsubscribe from congestion event of the given device.", "responses": { "204": { "content": { "application/json": { "examples": { "Example_1": { "value": {} } }, "schema": {} } }, "description": "" }, "422": { "content": { "application/json": { "examples": { "Example_1": { "value": { "detail": [ { "loc": [], "msg": "", "type": "" } ] } } }, "schema": { "properties": { "detail": { "items": { "properties": { "loc": { "type": "array", "items": { "type": "string" }, "title": "Location" }, "msg": { "type": "string", "title": "Message" }, "type": { "type": "string", "title": "Error Type" } }, "type": "object", "required": [ "loc", "msg", "type" ], "title": "ValidationError" }, "type": "array", "title": "Detail" } }, "type": "object", "title": "HTTPValidationError" } } }, "description": "" } } } }, "/passthrough/camara/v1/number-verification/number-verification/v0/device-phone-number": { "get": { "tags": [ "Number Verification v1.0.0" ], "summary": "Returns the phone number associated with the access token", "parameters": [ { "name": "state", "in": "query", "required": false, "description": "Application state", "schema": { "type": "string" } }, { "name": "code", "in": "query", "required": false, "description": "Authorization code received from the CSP", "schema": { "type": "string" } }, { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": { "type": "string" } }, { "name": "authorization", "in": "header", "required": false, "description": "authorization header for token", "schema": { "type": "string" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "phoneNumberShare", "description": "Returns the phone number so the API clients can verify the number themselves:\n- It will be done for the user that has authenticated via mobile network\n- It returns the authenticated user's `device phone number` associated to the access token\n", "responses": { "200": { "content": { "application/json": { "examples": { "Example_1": { "value": { "devicePhoneNumber": "+123456789" } } }, "schema": { "type": "object", "description": "Number verification share result", "required": [ "devicePhoneNumber" ], "properties": { "devicePhoneNumber": { "type": "string", "pattern": "^\\+[1-9][0-9]{4,14}$", "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 '+'." } } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param" } } }, "schema": { "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" } } } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "GENERIC_401_AUTHENTICATION_REQUIRED": { "description": "New authentication is needed, authentication is no longer valid", "value": { "status": 401, "code": "AUTHENTICATION_REQUIRED", "message": "New authentication is required." } }, "GENERIC_401_UNAUTHENTICATED": { "description": "Request cannot be authenticated", "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials." } } }, "schema": { "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" } } } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "GENERIC_403_PERMISSION_DENIED": { "description": "Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security", "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action." } }, "GENERIC_403_USER_NOT_AUTHENTICATED_BY_MOBILE_NETWORK": { "value": { "status": 403, "code": "NUMBER_VERIFICATION.USER_NOT_AUTHENTICATED_BY_MOBILE_NETWORK", "message": "Client must authenticate via the mobile network to use this service" } }, "GENERIC_403_INVALID_TOKEN_CONTEXT": { "value": { "status": 403, "code": "INVALID_TOKEN_CONTEXT", "message": "Phone number cannot be deducted from access token context" } } }, "schema": { "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" } } } } }, "description": "" }, "500": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 500, "code": "INTERNAL", "message": "Server error" } } }, "schema": { "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" } } } } }, "description": "" }, "503": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 503, "code": "UNAVAILABLE", "message": "Service unavailable" } } }, "schema": { "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" } } } } }, "description": "" }, "504": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 504, "code": "TIMEOUT", "message": "Request timeout exceeded. Try later." } } }, "schema": { "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" } } } } }, "description": "" } } } }, "/device-status/device-roaming-status-subscriptions/v0.8/subscriptions": { "get": { "tags": [ "Device Roaming Status Subscriptions v0.8" ], "summary": "Retrieve a list of device roaming status event subscription", "parameters": [ { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": {} }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "retrieveDeviceRoamingStatusSubscriptionList-DS-ROS-V080", "description": "Retrieve a list of device roaming status event subscription(s)", "responses": { "200": { "content": { "application/json": { "examples": { "List of Subscriptions": { "description": "A list of API consumer subscriptions. If a 3-legged access token is used, the list is specific to the device associated with that token.", "value": [ { "id": "550e8400-e29b-41d4-a716-446655440000", "sink": "https://endpoint.example.com/sink", "protocol": "HTTP", "types": [ "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-on" ], "config": { "subscriptionDetail": {}, "subscriptionExpireTime": "2024-07-17T13:18:23.682Z", "subscriptionMaxEvents": 5, "initialEvent": true }, "startsAt": "2024-07-03T21:12:02.871Z", "expiresAt": "2024-07-03T21:12:02.871Z", "status": "ACTIVE" } ] }, "Empty List of Subscriptions": { "description": "The API consumer either has no subscriptions or, if a 3-legged access token is used, has none for the device associated with that token.", "value": [] } }, "schema": { "type": "array", "minItems": 0, "items": { "description": "Represents a event-type subscription.", "type": "object", "required": [ "sink", "protocol", "config", "types", "id" ], "properties": { "protocol": { "type": "string", "enum": [ "HTTP", "MQTT3", "MQTT5", "AMQP", "NATS", "KAFKA" ], "description": "Identifier of a delivery protocol. Only HTTP is allowed for now" }, "sink": { "type": "string", "format": "uri", "pattern": "^https:\\/\\/.+$", "description": "The address to which events shall be delivered using the selected protocol." }, "types": { "description": "Camara Event types eligible to be delivered by this subscription.\nNote: for the Commonalities meta-release v0.4 we enforce to have only event type per subscription then for following meta-release use of array MUST be decided\n\n\n\n\n\n at API project level.\n", "type": "array", "minItems": 1, "maxItems": 1, "items": { "type": "string", "description": "roaming-status - Event triggered when the device switch from roaming ON to roaming OFF and conversely\n\nroaming-on - Event triggered when the device switch from roaming OFF to roaming ON\n\nroaming-off - Event triggered when the device switch from roaming ON to roaming OFF\n\nroaming-change-country - Event triggered when the device in roaming change country code\n", "enum": [ "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-status", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-on", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-off", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-change-country" ] } }, "config": { "description": "Implementation-specific configuration parameters needed by the subscription manager for acquiring events.\nIn CAMARA we have predefined attributes like `subscriptionExpireTime`, `subscriptionMaxEvents`, `initialEvent`\nSpecific event type attributes must be defined in `subscriptionDetail`\nNote: if a request is performed for several event type, all subscribed event will use same `config` parameters.\n", "type": "object", "required": [ "subscriptionDetail" ], "properties": { "subscriptionDetail": { "description": "The detail of the requested event subscription.", "type": "object", "properties": { "device": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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.\n", "type": "object", "properties": { "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}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 } } }, "subscriptionExpireTime": { "type": "string", "format": "date-time", "description": "The subscription expiration time (in date-time format) requested by the API consumer. It must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone." }, "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 }, "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.\nExample: Consumer request Roaming event. If consumer sets initialEvent to true and device is in roaming situation, an event is triggered.\n" } } }, "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." }, "startsAt": { "type": "string", "format": "date-time", "description": "Date when the event subscription will begin/began\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\n" }, "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.\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\n" }, "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\n\n\n\n\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" ] } } } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "GENERIC_400_INVALID_ARGUMENT": { "description": "Invalid Argument. Generic Syntax Exception", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 400 ] }, "code": { "enum": [ "INVALID_ARGUMENT" ] } } } ] } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "GENERIC_401_UNAUTHENTICATED": { "description": "Request cannot be authenticated and a new authentication is required", "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials. A new authentication is required." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 401 ] }, "code": { "enum": [ "UNAUTHENTICATED" ] } } } ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "GENERIC_403_PERMISSION_DENIED": { "description": "Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security", "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 403 ] }, "code": { "enum": [ "PERMISSION_DENIED" ] } } } ] } } }, "description": "" } } }, "post": { "tags": [ "Device Roaming Status Subscriptions v0.8" ], "summary": "Create a device roaming status event subscription for a device", "parameters": [ { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": {} }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "createDeviceRoamingStatusSubscription-DS-ROS-V080", "description": "Create a device roaming status event subscription for a device", "responses": { "201": { "content": { "application/json": { "examples": { "Active Subscription With Device Disambiguation": { "value": { "id": "550e8400-e29b-41d4-a716-446655440000", "sink": "https://endpoint.example.com/sink", "protocol": "HTTP", "types": [ "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-on" ], "config": { "subscriptionDetail": { "device": { "phoneNumber": "+99999991000" } }, "subscriptionExpireTime": "2024-07-17T13:18:23.682Z", "subscriptionMaxEvents": 5, "initialEvent": true }, "startsAt": "2024-07-03T21:12:02.871Z", "expiresAt": "2024-07-03T21:12:02.871Z", "status": "ACTIVE" } }, "Active Subscription": { "value": { "id": "550e8400-e29b-41d4-a716-446655440000", "sink": "https://endpoint.example.com/sink", "protocol": "HTTP", "types": [ "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-on" ], "config": { "subscriptionDetail": {}, "subscriptionExpireTime": "2024-07-17T13:18:23.682Z", "subscriptionMaxEvents": 5, "initialEvent": true }, "startsAt": "2024-07-03T21:12:02.871Z", "expiresAt": "2024-07-03T21:12:02.871Z", "status": "ACTIVE" } } }, "schema": { "description": "Represents a event-type subscription.", "type": "object", "required": [ "sink", "protocol", "config", "types", "id" ], "properties": { "protocol": { "type": "string", "enum": [ "HTTP", "MQTT3", "MQTT5", "AMQP", "NATS", "KAFKA" ], "description": "Identifier of a delivery protocol. Only HTTP is allowed for now" }, "sink": { "type": "string", "format": "uri", "pattern": "^https:\\/\\/.+$", "description": "The address to which events shall be delivered using the selected protocol." }, "types": { "description": "Camara Event types eligible to be delivered by this subscription.\nNote: for the Commonalities meta-release v0.4 we enforce to have only event type per subscription then for following meta-release use of array MUST be decided\n\n\n\n\n\n at API project level.\n", "type": "array", "minItems": 1, "maxItems": 1, "items": { "type": "string", "description": "roaming-status - Event triggered when the device switch from roaming ON to roaming OFF and conversely\n\nroaming-on - Event triggered when the device switch from roaming OFF to roaming ON\n\nroaming-off - Event triggered when the device switch from roaming ON to roaming OFF\n\nroaming-change-country - Event triggered when the device in roaming change country code\n", "enum": [ "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-status", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-on", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-off", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-change-country" ] } }, "config": { "description": "Implementation-specific configuration parameters needed by the subscription manager for acquiring events.\nIn CAMARA we have predefined attributes like `subscriptionExpireTime`, `subscriptionMaxEvents`, `initialEvent`\nSpecific event type attributes must be defined in `subscriptionDetail`\nNote: if a request is performed for several event type, all subscribed event will use same `config` parameters.\n", "type": "object", "required": [ "subscriptionDetail" ], "properties": { "subscriptionDetail": { "description": "The detail of the requested event subscription.", "type": "object", "properties": { "device": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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.\n", "type": "object", "properties": { "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}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 } } }, "subscriptionExpireTime": { "type": "string", "format": "date-time", "description": "The subscription expiration time (in date-time format) requested by the API consumer. It must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone." }, "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 }, "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.\nExample: Consumer request Roaming event. If consumer sets initialEvent to true and device is in roaming situation, an event is triggered.\n" } } }, "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." }, "startsAt": { "type": "string", "format": "date-time", "description": "Date when the event subscription will begin/began\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\n" }, "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.\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\n" }, "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\n\n\n\n\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" ] } } } } }, "description": "" }, "202": { "content": { "application/json": { "examples": { "Example_1": { "value": { "id": "qs15-h556-rt89-1298" } } }, "schema": { "description": "Response for a device reachability status operation managed asynchronously (Creation or Deletion)", "type": "object", "required": [ "id" ], "properties": { "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." } } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "GENERIC_400_INVALID_PROTOCOL": { "description": "Invalid protocol for events subscription management", "value": { "status": 400, "code": "INVALID_PROTOCOL", "message": "Only HTTP is supported" } }, "GENERIC_400_INVALID_SINK": { "description": "Invalid sink value", "value": { "status": 400, "code": "INVALID_SINK", "message": "sink not valid for the specified protocol" } }, "GENERIC_400_INVALID_CREDENTIAL": { "description": "Invalid sink credential type", "value": { "status": 400, "code": "INVALID_CREDENTIAL", "message": "Only Access token is supported" } }, "GENERIC_400_INVALID_ARGUMENT": { "description": "Invalid Argument. Generic Syntax Exception", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param." } }, "GENERIC_400_OUT_OF_RANGE": { "description": "Out of Range. Specific Syntax Exception used when a given field has a pre-defined range or a invalid filter criteria combination is requested", "value": { "status": 400, "code": "OUT_OF_RANGE", "message": "Client specified an invalid range." } }, "GENERIC_400_INVALID_TOKEN": { "description": "Invalid token type for sink credential of type ACCESSTOKEN", "value": { "status": 400, "code": "INVALID_TOKEN", "message": "Only bearer token is supported" } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 400 ] }, "code": { "enum": [ "INVALID_ARGUMENT", "OUT_OF_RANGE", "INVALID_PROTOCOL", "INVALID_CREDENTIAL", "INVALID_TOKEN", "INVALID_SINK" ] } } } ] } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "GENERIC_401_UNAUTHENTICATED": { "description": "Request cannot be authenticated and a new authentication is required", "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials. A new authentication is required." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 401 ] }, "code": { "enum": [ "UNAUTHENTICATED" ] } } } ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "GENERIC_403_PERMISSION_DENIED": { "description": "Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security", "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action." } }, "GENERIC_403_SUBSCRIPTION_MISMATCH": { "description": "Inconsistent access token for requested subscription", "value": { "status": 403, "code": "SUBSCRIPTION_MISMATCH", "message": "Inconsistent access token for requested events subscription" } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 403 ] }, "code": { "enum": [ "PERMISSION_DENIED", "SUBSCRIPTION_MISMATCH" ] } } } ] } } }, "description": "" }, "409": { "content": { "application/json": { "examples": { "GENERIC_409_ABORTED": { "description": "Concurreny of processes of the same nature/scope", "value": { "status": 409, "code": "ABORTED", "message": "Concurrency conflict." } }, "GENERIC_409_ALREADY_EXISTS": { "description": "Trying to create an existing resource", "value": { "status": 409, "code": "ALREADY_EXISTS", "message": "The resource that a client tried to create already exists." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 409 ] }, "code": { "enum": [ "ABORTED", "ALREADY_EXISTS" ] } } } ] } } }, "description": "" }, "422": { "content": { "application/json": { "examples": { "GENERIC_422_MISSING_IDENTIFIER": { "description": "An identifier is not included in the request and the device or phone number identification cannot be derived from the 3-legged access token", "value": { "status": 422, "code": "MISSING_IDENTIFIER", "message": "The device cannot be identified." } }, "GENERIC_422_UNNECESSARY_IDENTIFIER": { "description": "An explicit identifier is provided when a device or phone number has already been identified from the access token", "value": { "status": 422, "code": "UNNECESSARY_IDENTIFIER", "message": "The device is already identified by the access token." } }, "GENERIC_422_MULTIEVENT_SUBSCRIPTION_NOT_SUPPORTED": { "description": "Multi event types subscription is not supported", "value": { "status": 422, "code": "MULTIEVENT_SUBSCRIPTION_NOT_SUPPORTED", "message": "Multi event types subscription not managed" } }, "GENERIC_422_UNSUPPORTED_IDENTIFIER": { "description": "None of the provided identifiers is supported by the implementation", "value": { "status": 422, "code": "UNSUPPORTED_IDENTIFIER", "message": "The identifier provided is not supported." } }, "GENERIC_422_SERVICE_NOT_APPLICABLE": { "description": "Service not applicable for the provided identifier", "value": { "status": 422, "code": "SERVICE_NOT_APPLICABLE", "message": "The service is not available for the provided identifier." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 422 ] }, "code": { "enum": [ "SERVICE_NOT_APPLICABLE", "MISSING_IDENTIFIER", "UNSUPPORTED_IDENTIFIER", "UNNECESSARY_IDENTIFIER", "MULTIEVENT_SUBSCRIPTION_NOT_SUPPORTED" ] } } } ] } } }, "description": "" }, "429": { "content": { "application/json": { "examples": { "GENERIC_429_TOO_MANY_REQUESTS": { "description": "Access to the API has been temporarily blocked due to rate or spike arrest limits being reached", "value": { "status": 429, "code": "TOO_MANY_REQUESTS", "message": "Rate limit reached." } }, "GENERIC_429_QUOTA_EXCEEDED": { "description": "Request is rejected due to exceeding a business quota limit", "value": { "status": 429, "code": "QUOTA_EXCEEDED", "message": "Out of resource quota." } } }, "schema": { "allOf": [ { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, { "type": "object", "properties": { "status": { "enum": [ 429 ] }, "code": { "enum": [ "QUOTA_EXCEEDED", "TOO_MANY_REQUESTS" ] } } } ] } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "Create Roaming Status Subscription": { "value": { "sink": "https://endpoint.example.com/sink", "sinkCredential": { "credentialType": "ACCESSTOKEN", "accessToken": "xxx", "accessTokenExpiresUtc": "2024-02-17T16:23:45Z", "accessTokenType": "bearer" }, "protocol": "HTTP", "types": [ "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-status" ], "config": { "subscriptionDetail": { "device": { "phoneNumber": "+99999991000" } }, "subscriptionExpireTime": "2023-01-17T13:18:23.682Z", "subscriptionMaxEvents": 5, "initialEvent": true } } }, "Create Roaming Change Country Subscription": { "value": { "sink": "https://endpoint.example.com/sink", "sinkCredential": { "credentialType": "ACCESSTOKEN", "accessToken": "xxx", "accessTokenExpiresUtc": "2024-02-17T16:23:45Z", "accessTokenType": "bearer" }, "protocol": "HTTP", "types": [ "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-change-country" ], "config": { "subscriptionDetail": { "device": { "phoneNumber": "+99999991000" } }, "subscriptionExpireTime": "2023-01-17T13:18:23.682Z", "subscriptionMaxEvents": 5, "initialEvent": true } } }, "Create Roaming On Subscription": { "value": { "sink": "https://endpoint.example.com/sink", "sinkCredential": { "credentialType": "ACCESSTOKEN", "accessToken": "xxx", "accessTokenExpiresUtc": "2024-02-17T16:23:45Z", "accessTokenType": "bearer" }, "protocol": "HTTP", "types": [ "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-on" ], "config": { "subscriptionDetail": { "device": { "phoneNumber": "+99999991000" } }, "subscriptionMaxEvents": 5, "subscriptionExpireTime": "2023-01-17T13:18:23.682Z", "initialEvent": true } } }, "Create Roaming Off Subscription": { "value": { "sink": "https://endpoint.example.com/sink", "sinkCredential": { "credentialType": "ACCESSTOKEN", "accessToken": "xxx", "accessTokenExpiresUtc": "2024-02-17T16:23:45Z", "accessTokenType": "bearer" }, "protocol": "HTTP", "types": [ "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-off" ], "config": { "subscriptionDetail": { "device": { "phoneNumber": "+99999991000" } }, "subscriptionMaxEvents": 5, "subscriptionExpireTime": "2023-01-17T13:18:23.682Z", "initialEvent": true } } } }, "schema": { "description": "The request for creating a event-type event subscription", "type": "object", "required": [ "sink", "protocol", "config", "types" ], "properties": { "protocol": { "type": "string", "enum": [ "HTTP", "MQTT3", "MQTT5", "AMQP", "NATS", "KAFKA" ], "description": "Identifier of a delivery protocol. Only HTTP is allowed for now" }, "sink": { "type": "string", "format": "uri", "pattern": "^https:\\/\\/.+$", "description": "The address to which events shall be delivered using the selected protocol." }, "sinkCredential": { "description": "A sink credential provides authentication or authorization information necessary to enable delivery of events to a target.", "type": "object", "properties": { "credentialType": { "type": "string", "enum": [ "PLAIN", "ACCESSTOKEN", "REFRESHTOKEN" ], "description": "The type of the credential.\nNote: Type of the credential - MUST be set to ACCESSTOKEN for now\n" } }, "required": [ "credentialType" ] }, "types": { "description": "Camara Event types eligible to be delivered by this subscription.\nNote: for the current Commonalities version (v0.5) only one event type per subscription is allowed, yet in the following releases use of array of event types SHALL be specified without changing this definition.\n", "type": "array", "minItems": 1, "maxItems": 1, "items": { "type": "string", "description": "roaming-status - Event triggered when the device switch from roaming ON to roaming OFF and conversely\n\nroaming-on - Event triggered when the device switch from roaming OFF to roaming ON\n\nroaming-off - Event triggered when the device switch from roaming ON to roaming OFF\n\nroaming-change-country - Event triggered when the device in roaming change country code\n", "enum": [ "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-status", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-on", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-off", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-change-country" ] } }, "config": { "description": "Implementation-specific configuration parameters needed by the subscription manager for acquiring events.\nIn CAMARA we have predefined attributes like `subscriptionExpireTime`, `subscriptionMaxEvents`, `initialEvent`\nSpecific event type attributes must be defined in `subscriptionDetail`\nNote: if a request is performed for several event type, all subscribed event will use same `config` parameters.\n", "type": "object", "required": [ "subscriptionDetail" ], "properties": { "subscriptionDetail": { "description": "The detail of the requested event subscription.", "type": "object", "properties": { "device": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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.\n", "type": "object", "properties": { "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}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 } } }, "subscriptionExpireTime": { "type": "string", "format": "date-time", "description": "The subscription expiration time (in date-time format) requested by the API consumer. It must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone." }, "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 }, "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.\nExample: Consumer request Roaming event. If consumer sets initialEvent to true and device is in roaming situation, an event is triggered.\n" } } } } } } }, "description": "" } } }, "/geofencing-subscriptions/v0.3/subscriptions": { "post": { "tags": [ "Geofencing v0.3.0" ], "summary": "Create a geofencing subscription for a device", "parameters": [ { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": { "type": "string" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "createSubscription", "description": "Create a subscription for a device to receive notifications when a device enters or exits a specified area", "responses": { "201": { "content": { "application/json": { "examples": { "Example_1": { "value": { "protocol": "HTTP", "sink": "https://endpoint.example.com/sink", "sinkCredential": { "credentialType": "PLAIN" }, "types": [], "config": { "subscriptionDetail": { "device": { "phoneNumber": "+123456789", "networkAccessIdentifier": "123456789@domain.com", "ipv4Address": { "publicAddress": "84.125.93.10", "privateAddress": "84.125.93.10", "publicPort": 0 }, "ipv6Address": "2001:db8:85a3:8d3:1319:8a2e:370:7344" }, "area": { "areaType": "CIRCLE" } }, "subscriptionExpireTime": "2023-01-17T13:18:23.682Z", "subscriptionMaxEvents": 5, "initialEvent": true }, "id": "1119920371", "startsAt": "", "expiresAt": "", "status": "ACTIVATION_REQUESTED" } } }, "schema": { "description": "Represents a event-type subscription.", "type": "object", "required": [ "sink", "protocol", "config", "types", "id", "startsAt" ], "properties": { "protocol": { "type": "string", "enum": [ "HTTP", "MQTT3", "MQTT5", "AMQP", "NATS", "KAFKA" ], "description": "Identifier of a delivery protocol. Only HTTP is allowed for now" }, "sink": { "type": "string", "format": "url", "description": "The address to which events shall be delivered using the selected protocol." }, "sinkCredential": { "type": "object", "properties": { "credentialType": { "type": "string", "enum": [ "PLAIN", "ACCESSTOKEN", "REFRESHTOKEN" ], "description": "The type of the credential." } }, "required": [ "credentialType" ] }, "types": { "description": "Camara Event types eligible to be delivered by this subscription.\n", "type": "array", "items": { "type": "string" } }, "config": { "description": "Implementation-specific configuration parameters needed by the subscription manager for acquiring events.\nIn CAMARA we have predefined attributes like `subscriptionExpireTime`, `subscriptionMaxEvents`, `initialEvent`\nSpecific event type attributes must be defined in `subscriptionDetail`\nNote: if a request is performed for several event type, all subscribed event will use same `config` parameters.\n", "type": "object", "required": [ "subscriptionDetail" ], "properties": { "subscriptionDetail": { "description": "The detail of the requested event subscription", "type": "object", "properties": { "device": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE1: 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.\nNOTE2: 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.\n", "type": "object", "properties": { "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}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 }, "area": { "type": "object", "properties": { "areaType": { "type": "string", "description": "Type of this area.\nCIRCLE - The area is defined as a circle.\nPOI - The area is defined by a named point of interest.\n", "enum": [ "CIRCLE", "POI" ] } }, "required": [ "areaType" ] } }, "required": [ "device", "area" ] }, "subscriptionExpireTime": { "type": "string", "format": "date-time", "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 }, "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.\nExample: Consumer request area entered event. If consumer sets initialEvent to true and device is already in the geofence, an event is triggered\n" } } }, "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)." }, "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\n\n\n\n\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" ] } } } } }, "description": "" }, "202": { "content": { "application/json": { "examples": { "Example_1": { "value": { "id": "qs15-h556-rt89-1298" } } }, "schema": { "description": "Response for a event-type subscription request managed asynchronously (Creation or Deletion)", "type": "object", "properties": { "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)." } } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "InvalidToken": { "value": { "status": 400, "code": "INVALID_TOKEN", "message": "Only bearer token is supported" } }, "InvalidCredential": { "value": { "status": 400, "code": "INVALID_CREDENTIAL", "message": "Only Access token is supported" } }, "InvalidProtocol": { "value": { "status": 400, "code": "INVALID_PROTOCOL", "message": "Only HTTP is supported" } }, "InvalidArgument": { "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param" } } }, "schema": { "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" } } } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials." } } }, "schema": { "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" } } } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action" } } }, "schema": { "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" } } } } }, "description": "" }, "422": { "content": { "application/json": { "examples": { "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." } }, "POINotSupported": { "value": { "status": 422, "code": "POI_NOT_SUPPORTED", "message": "POI areaType only supported on CAMARA CSP" } }, "PermissionDenied": { "value": { "status": 422, "code": "MULTIEVENT_SUBSCRIPTION_NOT_SUPPORTED", "message": "Multi event types subscription not managed" } }, "AreaNotCovered": { "value": { "status": 422, "code": "AREA_NOT_COVERED", "message": "The specified area cannot be covered or is too small to be valid" } }, "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." } } }, "schema": { "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" } } } } }, "description": "" }, "429": { "content": { "application/json": { "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." } } }, "schema": { "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" } } } } }, "description": "" }, "500": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 500, "code": "INTERNAL", "message": "Server error" } } }, "schema": { "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" } } } } }, "description": "" }, "503": { "content": { "application/json": { "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." } } }, "schema": { "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" } } } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "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": "+99999991000" }, "area": { "areaType": "CIRCLE", "center": { "latitude": 50.735851, "longitude": 7.10066 }, "radius": 2000 } }, "initialEvent": true, "subscriptionMaxEvents": 10, "subscriptionExpireTime": "2045-03-22T05:40:58.469Z" } } }, "CIRCLE_AREA_LEFT": { "description": "A sample geofence for leaving a circle area", "value": { "protocol": "HTTP", "sink": "https://notificationSendServer12.supertelco.com", "types": [ "org.camaraproject.geofencing-subscriptions.v0.area-left" ], "config": { "subscriptionDetail": { "device": { "phoneNumber": "+99999991001" }, "area": { "areaType": "CIRCLE", "center": { "latitude": 41.354178, "longitude": 2.12692 }, "radius": 2000 } }, "initialEvent": true, "subscriptionMaxEvents": 10, "subscriptionExpireTime": "2045-03-22T05:40:58.469Z" } } } }, "schema": { "description": "The request for creating a event-type event subscription", "type": "object", "required": [ "sink", "protocol", "config", "types" ], "properties": { "protocol": { "type": "string", "enum": [ "HTTP", "MQTT3", "MQTT5", "AMQP", "NATS", "KAFKA" ], "description": "Identifier of a delivery protocol. Only HTTP is allowed for now" }, "sink": { "type": "string", "format": "url", "description": "The address to which events shall be delivered using the selected protocol." }, "sinkCredential": { "allOf": [ { "description": "A sink credential provides authentication or authorization information necessary to enable delivery of events to a target." }, { "type": "object", "properties": { "credentialType": { "type": "string", "enum": [ "PLAIN", "ACCESSTOKEN", "REFRESHTOKEN" ], "description": "The type of the credential." } }, "required": [ "credentialType" ] } ] }, "types": { "description": "Camara Event types eligible to be delivered by this subscription.\nNote: As of now we enforce to have only event type per subscription.\n", "type": "array", "minItems": 1, "maxItems": 1, "items": { "type": "string", "description": "area-entered - Event triggered when the device enters the given area\n\narea-left - Event triggered when the device leaves the given area\n", "enum": [ "org.camaraproject.geofencing-subscriptions.v0.area-entered", "org.camaraproject.geofencing-subscriptions.v0.area-left" ] } }, "config": { "description": "Implementation-specific configuration parameters needed by the subscription manager for acquiring events.\nIn CAMARA we have predefined attributes like `subscriptionExpireTime`, `subscriptionMaxEvents`, `initialEvent`\nSpecific event type attributes must be defined in `subscriptionDetail`\nNote: if a request is performed for several event type, all subscribed event will use same `config` parameters.\n", "type": "object", "required": [ "subscriptionDetail" ], "properties": { "subscriptionDetail": { "description": "The detail of the requested event subscription", "type": "object", "properties": { "device": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE1: 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.\nNOTE2: 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.\n", "type": "object", "properties": { "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}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 }, "area": { "type": "object", "properties": { "areaType": { "type": "string", "description": "Type of this area.\nCIRCLE - The area is defined as a circle.\nPOI - The area is defined by a named point of interest.\n", "enum": [ "CIRCLE", "POI" ] } }, "required": [ "areaType" ] } }, "required": [ "device", "area" ] }, "subscriptionExpireTime": { "type": "string", "format": "date-time", "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 }, "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.\nExample: Consumer request area entered event. If consumer sets initialEvent to true and device is already in the geofence, an event is triggered\n" } } } } } } }, "description": "" } }, "get": { "tags": [ "Geofencing v0.3.0" ], "summary": "Retrieve a list of geofencing event subscription", "parameters": [ { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": { "type": "string" } }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "retrieveGeofencingSubscriptionList", "description": "Retrieve a list of geofencing event subscription(s)", "responses": { "200": { "content": { "application/json": { "examples": { "Example_1": { "value": [ { "protocol": "HTTP", "sink": "https://endpoint.example.com/sink", "sinkCredential": { "credentialType": "PLAIN" }, "types": [], "config": { "subscriptionDetail": { "device": { "phoneNumber": "+123456789", "networkAccessIdentifier": "123456789@domain.com", "ipv4Address": { "publicAddress": "84.125.93.10", "privateAddress": "84.125.93.10", "publicPort": 0 }, "ipv6Address": "2001:db8:85a3:8d3:1319:8a2e:370:7344" }, "area": { "areaType": "CIRCLE" } }, "subscriptionExpireTime": "2023-01-17T13:18:23.682Z", "subscriptionMaxEvents": 5, "initialEvent": true }, "id": "1119920371", "startsAt": "", "expiresAt": "", "status": "ACTIVATION_REQUESTED" } ] } }, "schema": { "type": "array", "minItems": 0, "items": { "description": "Represents a event-type subscription.", "type": "object", "required": [ "sink", "protocol", "config", "types", "id", "startsAt" ], "properties": { "protocol": { "type": "string", "enum": [ "HTTP", "MQTT3", "MQTT5", "AMQP", "NATS", "KAFKA" ], "description": "Identifier of a delivery protocol. Only HTTP is allowed for now" }, "sink": { "type": "string", "format": "url", "description": "The address to which events shall be delivered using the selected protocol." }, "sinkCredential": { "type": "object", "properties": { "credentialType": { "type": "string", "enum": [ "PLAIN", "ACCESSTOKEN", "REFRESHTOKEN" ], "description": "The type of the credential." } }, "required": [ "credentialType" ] }, "types": { "description": "Camara Event types eligible to be delivered by this subscription.\n", "type": "array", "items": { "type": "string" } }, "config": { "description": "Implementation-specific configuration parameters needed by the subscription manager for acquiring events.\nIn CAMARA we have predefined attributes like `subscriptionExpireTime`, `subscriptionMaxEvents`, `initialEvent`\nSpecific event type attributes must be defined in `subscriptionDetail`\nNote: if a request is performed for several event type, all subscribed event will use same `config` parameters.\n", "type": "object", "required": [ "subscriptionDetail" ], "properties": { "subscriptionDetail": { "description": "The detail of the requested event subscription", "type": "object", "properties": { "device": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE1: 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.\nNOTE2: 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.\n", "type": "object", "properties": { "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}$" }, "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" }, "ipv4Address": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "privateAddress": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4" }, "publicPort": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ] }, "ipv6Address": { "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).\n", "type": "string", "format": "ipv6" } }, "minProperties": 1 }, "area": { "type": "object", "properties": { "areaType": { "type": "string", "description": "Type of this area.\nCIRCLE - The area is defined as a circle.\nPOI - The area is defined by a named point of interest.\n", "enum": [ "CIRCLE", "POI" ] } }, "required": [ "areaType" ] } }, "required": [ "device", "area" ] }, "subscriptionExpireTime": { "type": "string", "format": "date-time", "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 }, "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.\nExample: Consumer request area entered event. If consumer sets initialEvent to true and device is already in the geofence, an event is triggered\n" } } }, "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)." }, "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\n\n\n\n\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" ] } } } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param" } } }, "schema": { "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" } } } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials." } } }, "schema": { "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" } } } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action" } } }, "schema": { "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" } } } } }, "description": "" }, "429": { "content": { "application/json": { "examples": { "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." } }, "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." } } }, "schema": { "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" } } } } }, "description": "" }, "500": { "content": { "application/json": { "examples": { "Example_1": { "value": { "status": 500, "code": "INTERNAL", "message": "Server error" } } }, "schema": { "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" } } } } }, "description": "" }, "503": { "content": { "application/json": { "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." } } }, "schema": { "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" } } } } }, "description": "" } } } }, "/congestion-insights/v0/query": { "post": { "tags": [ "Congestion Insights v1.0.0" ], "summary": "Fetch congestion level for a device.", "operationId": "fetch", "description": "Fetch historical or predicted congestion level of a device for a given period.", "responses": { "200": { "content": { "application/json": { "examples": { "Example_1": { "value": [ { "timeIntervalStart": "", "timeIntervalStop": "", "congestionLevel": "Low", "confidenceLevel": 0 } ] } }, "schema": { "items": { "properties": { "timeIntervalStart": { "type": "string", "format": "date-time", "title": "Timeintervalstart" }, "timeIntervalStop": { "type": "string", "format": "date-time", "title": "Timeintervalstop" }, "congestionLevel": { "type": "string", "enum": [ "Low", "Medium", "High" ], "title": "CongestionLevel" }, "confidenceLevel": { "type": "integer", "maximum": 100, "minimum": 0, "format": "int32", "title": "Confidencelevel", "nullable": true } }, "type": "object", "required": [ "timeIntervalStart", "timeIntervalStop", "congestionLevel" ], "title": "CongestionData" }, "type": "array", "title": "Response Fetch" } } }, "description": "" }, "422": { "content": { "application/json": { "examples": { "Example_1": { "value": { "detail": [ { "loc": [], "msg": "", "type": "" } ] } } }, "schema": { "properties": { "detail": { "items": { "properties": { "loc": { "type": "array", "items": { "type": "string" }, "title": "Location" }, "msg": { "type": "string", "title": "Message" }, "type": { "type": "string", "title": "Error Type" } }, "type": "object", "required": [ "loc", "msg", "type" ], "title": "ValidationError" }, "type": "array", "title": "Detail" } }, "type": "object", "title": "HTTPValidationError" } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "FETCH_CONGESTION_LEVEL": { "value": { "device": { "phoneNumber": "+99999991000" }, "webhook": { "notificationUrl": "http://example.com/notify", "notificationAuthToken": "c8974e592f9fh683d4a3960714" }, "subscriptionExpireTime": "2045-04-12T14:09:33+05:00" } } }, "schema": { "properties": { "device": { "properties": { "phoneNumber": { "type": "string", "maxLength": 16, "pattern": "^\\+[1-9][0-9]{4,14}$", "title": "Phonenumber", "description": "Phone number of the subscription, if any. Optional.", "nullable": true }, "networkAccessIdentifier": { "type": "string", "maxLength": 256, "pattern": "^\\S+@\\S+\\.\\S+$", "title": "Networkaccessidentifier", "description": "Email address-like external identifier of the subscription registered at the operator. If both networkAccessIdentifier and phoneNumber are included, phoneNumber may be dropped and networkAccessIdentifier may be retained.", "nullable": true }, "ipv4Address": { "allOf": [ { "properties": { "publicAddress": { "type": "string", "maxLength": 15, "title": "Publicaddress", "description": "Public IPv4 address of the device. Either of the device or the NAT the device is behind.", "nullable": true }, "privateAddress": { "type": "string", "maxLength": 15, "title": "Privateaddress", "description": "Private IPv4 address of the device, if it is behind a NAT.", "nullable": true }, "publicPort": { "type": "integer", "maximum": 65535, "minimum": 0, "format": "int32", "title": "Publicport", "description": "Public port used by the device. Port is necessary, as private address ranges overlap, and public port is used to extend the range for CGNAT.", "nullable": true } }, "type": "object", "title": "DeviceIpv4Addr" } ], "description": "IPv4 address of the device. IP address is needed for some flow-oriented services, such as QoD." }, "ipv6Address": { "type": "string", "maxLength": 45, "title": "Ipv6Address", "description": "IPv6 address of the device. IP address is needed for some flow-oriented services, such as QoD.", "nullable": true } }, "type": "object", "title": "Device" }, "start": { "type": "string", "format": "date-time", "title": "Start", "description": "Start of the period queried. If not set, 15 minutes before end. If neither start or end is set, then the upcoming 15 minutes are predicted.", "nullable": true }, "end": { "type": "string", "format": "date-time", "title": "End", "description": "End of the period queried. If not set, 15 minutes after start.", "nullable": true } }, "type": "object", "required": [ "device" ], "title": "FetchCongestion" } } }, "description": "" }, "parameters": [ { "$ref": "#/components/parameters/x-rapidapi-host" } ] } }, "/passthrough/camara/v1/device-swap/device-swap/v1/check": { "post": { "tags": [ "Device Swap v1.0.0" ], "summary": "Check last device swap date", "parameters": [ { "name": "x-correlator", "in": "header", "required": false, "description": "Correlation id for the different services", "schema": {} }, { "$ref": "#/components/parameters/x-rapidapi-host" } ], "operationId": "checkDeviceSwap", "description": "Check if device swap has been performed during a past period", "responses": { "200": { "content": { "application/json": { "examples": { "Example_1": { "value": { "swapped": true } } }, "schema": { "type": "object", "required": [ "swapped" ], "properties": { "swapped": { "type": "boolean", "description": "Indicates whether the device has been swapped during the period within the provided age." } } } } }, "description": "" }, "400": { "content": { "application/json": { "examples": { "GENERIC_400_OUT_OF_RANGE": { "description": "Out of Range. Specific Syntax Exception used when a given field has a pre-defined range or a invalid filter criteria combination is requested", "value": { "status": 400, "code": "OUT_OF_RANGE", "message": "Client specified an invalid range." } }, "GENERIC_400_INVALID_ARGUMENT": { "description": "Invalid Argument. Generic Syntax Exception", "value": { "status": 400, "code": "INVALID_ARGUMENT", "message": "Client specified an invalid argument, request body or query param." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 400 ] }, "code": { "enum": [ "INVALID_ARGUMENT", "OUT_OF_RANGE" ] } } } ] } } }, "description": "" }, "401": { "content": { "application/json": { "examples": { "GENERIC_401_UNAUTHENTICATED": { "description": "Request cannot be authenticated", "value": { "status": 401, "code": "UNAUTHENTICATED", "message": "Request not authenticated due to missing, invalid, or expired credentials." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 401 ] }, "code": { "enum": [ "UNAUTHENTICATED" ] } } } ] } } }, "description": "" }, "403": { "content": { "application/json": { "examples": { "GENERIC_403_PERMISSION_DENIED": { "description": "Permission denied. OAuth2 token access does not have the required scope or when the user fails operational security", "value": { "status": 403, "code": "PERMISSION_DENIED", "message": "Client does not have sufficient permissions to perform this action." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 403 ] }, "code": { "enum": [ "PERMISSION_DENIED" ] } } } ] } } }, "description": "" }, "404": { "content": { "application/json": { "examples": { "GENERIC_404_IDENTIFIER_NOT_FOUND": { "description": "Some identifier cannot be matched to a device", "value": { "status": 404, "code": "IDENTIFIER_NOT_FOUND", "message": "Device identifier not found." } }, "GENERIC_404_NOT_FOUND": { "description": "Resource is not found", "value": { "status": 404, "code": "NOT_FOUND", "message": "The specified resource is not found." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 404 ] }, "code": { "enum": [ "NOT_FOUND", "IDENTIFIER_NOT_FOUND" ] } } } ] } } }, "description": "" }, "422": { "content": { "application/json": { "examples": { "GENERIC_422_SERVICE_NOT_APPLICABLE": { "description": "Service not applicable for the provided identifier", "value": { "status": 422, "code": "SERVICE_NOT_APPLICABLE", "message": "The service is not available for the provided identifier." } } }, "schema": { "allOf": [ { "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" } } }, { "type": "object", "properties": { "status": { "enum": [ 422 ] }, "code": { "enum": [ "SERVICE_NOT_APPLICABLE" ] } } } ] } } }, "description": "" } }, "requestBody": { "content": { "application/json": { "examples": { "DEVICE_SWAP_CHECK_TRUE_PHONE_NUMBER": { "value": { "phoneNumber": "+99999991000", "maxAge": 120 } }, "DEVICE_SWAP_CHECK_FALSE_PHONE_NUMBER": { "value": { "phoneNumber": "+99999991001", "maxAge": 120 } } }, "schema": { "type": "object", "properties": { "phoneNumber": { "type": "string", "pattern": "^\\+[1-9][0-9]{4,14}$", "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 '+'." }, "maxAge": { "type": "integer", "description": "Period in hours to be checked for device swap.\n", "format": "int32", "minimum": 1, "maximum": 2400, "default": 240 } } } } }, "description": "" } } }, "/.well-known/oauth-authorization-server": { "get": { "tags": [ "Well Known Metadata" ], "summary": "Get Well Known Oauth", "operationId": "get_well_known_oauth_oauth_authorization_server_get", "description": " ", "responses": { "200": { "content": { "application/json": { "examples": { "Example_1": { "value": { "authorization_endpoint": "", "token_endpoint": "", "fast_flow_csp_auth_endpoint": "" } } }, "schema": { "properties": { "authorization_endpoint": { "type": "string", "maxLength": 255, "title": "Authorization Endpoint" }, "token_endpoint": { "type": "string", "maxLength": 255, "title": "Token Endpoint" }, "fast_flow_csp_auth_endpoint": { "type": "string", "maxLength": 255, "title": "Fast Flow Csp Auth Endpoint" } }, "type": "object", "required": [ "authorization_endpoint", "token_endpoint", "fast_flow_csp_auth_endpoint" ], "title": "Metadata" } } }, "description": "" } }, "parameters": [ { "$ref": "#/components/parameters/x-rapidapi-host" } ] } } }, "components": { "schemas": { "ErrorInfo-Geo-V0": { "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" } } }, "SubscriptionRequest-Geo-V0": { "description": "The request for creating a event-type event subscription", "type": "object", "required": [ "sink", "protocol", "config", "types" ], "properties": { "protocol": { "$ref": "#/components/schemas/Protocol-Geo-V0" }, "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-Geo-V0" } ] }, "types": { "description": "Camara Event types eligible to be delivered by this subscription.\nNote: As of now we enforce to have only event type per subscription.\n", "type": "array", "minItems": 1, "maxItems": 1, "items": { "$ref": "#/components/schemas/SubscriptionEventType-Geo-V0" } }, "config": { "$ref": "#/components/schemas/Config-Geo-V0" } }, "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" } } }, "Protocol-Geo-V0": { "type": "string", "enum": [ "HTTP", "MQTT3", "MQTT5", "AMQP", "NATS", "KAFKA" ], "description": "Identifier of a delivery protocol. Only HTTP is allowed for now", "example": "HTTP" }, "Config-Geo-V0": { "description": "Implementation-specific configuration parameters needed by the subscription manager for acquiring events.\nIn CAMARA we have predefined attributes like `subscriptionExpireTime`, `subscriptionMaxEvents`, `initialEvent`\nSpecific event type attributes must be defined in `subscriptionDetail`\nNote: if a request is performed for several event type, all subscribed event will use same `config` parameters.\n", "type": "object", "required": [ "subscriptionDetail" ], "properties": { "subscriptionDetail": { "$ref": "#/components/schemas/SubscriptionDetail-Geo-V0" }, "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.\nExample: Consumer request area entered event. If consumer sets initialEvent to true and device is already in the geofence, an event is triggered\n" } } }, "SinkCredential-Geo-V0": { "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" ] }, "PlainCredential-Geo-V0": { "type": "object", "description": "A plain credential as a combination of an identifier and a secret.", "allOf": [ { "$ref": "#/components/schemas/SinkCredential-Geo-V0" }, { "type": "object", "required": [ "identifier", "secret" ], "properties": { "identifier": { "description": "The identifier might be an account or username.", "type": "string" }, "secret": { "description": "The secret might be a password or passphrase.", "type": "string" } } } ] }, "AccessTokenCredential-Geo-V0": { "type": "object", "description": "An access token credential.", "allOf": [ { "$ref": "#/components/schemas/SinkCredential-Geo-V0" }, { "type": "object", "properties": { "accessToken": { "description": "REQUIRED. An access token is a previously acquired token granting access to the target resource.", "type": "string" }, "accessTokenExpiresUtc": { "type": "string", "format": "date-time", "description": "REQUIRED. An absolute UTC instant at which the token shall be considered expired." }, "accessTokenType": { "description": "REQUIRED. Type of the access token (See [OAuth 2.0](https://tools.ietf.org/html/rfc6749#section-7.1)).", "type": "string", "enum": [ "bearer" ] } }, "required": [ "accessToken", "accessTokenExpiresUtc", "accessTokenType" ] } ] }, "RefreshTokenCredential-Geo-V0": { "type": "object", "description": "An access token credential with a refresh token.", "allOf": [ { "$ref": "#/components/schemas/SinkCredential-Geo-V0" }, { "type": "object", "properties": { "accessToken": { "description": "REQUIRED. An access token is a previously acquired token granting access to the target resource.", "type": "string" }, "accessTokenExpiresUtc": { "type": "string", "format": "date-time", "description": "REQUIRED. An absolute UTC instant at which the token shall be considered expired." }, "accessTokenType": { "description": "REQUIRED. Type of the access token (See [OAuth 2.0](https://tools.ietf.org/html/rfc6749#section-7.1)).", "type": "string", "enum": [ "bearer" ] }, "refreshToken": { "description": "REQUIRED. An refresh token credential used to acquire access tokens.", "type": "string" }, "refreshTokenEndpoint": { "type": "string", "format": "uri", "description": "REQUIRED. A URL at which the refresh token can be traded for an access token." } } } ], "required": [ "accessToken", "accessTokenExpiresUtc", "accessTokenType", "refreshToken", "refreshTokenEndpoint" ] }, "SubscriptionDetail-Geo-V0": { "description": "The detail of the requested event subscription", "type": "object", "properties": { "device": { "$ref": "#/components/schemas/Device-Geo-V0" }, "area": { "$ref": "#/components/schemas/Area-Geo-V0" } }, "required": [ "device", "area" ] }, "SubscriptionEventType-Geo-V0": { "type": "string", "description": "area-entered - Event triggered when the device enters the given area\n\narea-left - Event triggered when the device leaves the given area\n", "enum": [ "org.camaraproject.geofencing-subscriptions.v0.area-entered", "org.camaraproject.geofencing-subscriptions.v0.area-left" ] }, "NotificationEventType-Geo-V0": { "type": "string", "description": "area-entered - Event triggered when the device enters the given area\n\narea-left - Event triggered when the device leaves the given area\n\nsubscription-ends - Event triggered when the subscription ends\n", "enum": [ "org.camaraproject.geofencing-subscriptions.v0.area-entered", "org.camaraproject.geofencing-subscriptions.v0.area-left", "org.camaraproject.geofencing-subscriptions.v0.subscription-ends" ] }, "Subscription-Geo-V0": { "description": "Represents a event-type subscription.", "type": "object", "required": [ "sink", "protocol", "config", "types", "id", "startsAt" ], "properties": { "protocol": { "$ref": "#/components/schemas/Protocol-Geo-V0" }, "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-Geo-V0" }, "types": { "description": "Camara Event types eligible to be delivered by this subscription.\n", "type": "array", "items": { "type": "string" } }, "config": { "$ref": "#/components/schemas/Config-Geo-V0" }, "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\n\n\n\n\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" } } }, "SubscriptionAsync-Geo-V0": { "description": "Response for a event-type subscription request managed asynchronously (Creation or Deletion)", "type": "object", "properties": { "id": { "$ref": "#/components/schemas/SubscriptionId-Geo-V0" } } }, "SubscriptionId-Geo-V0": { "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" }, "Device-Geo-V0": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE1: 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.\nNOTE2: 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.\n", "type": "object", "properties": { "phoneNumber": { "$ref": "#/components/schemas/PhoneNumber-Geo-V0" }, "networkAccessIdentifier": { "$ref": "#/components/schemas/NetworkAccessIdentifier-Geo-V0" }, "ipv4Address": { "$ref": "#/components/schemas/DeviceIpv4Addr-Geo-V0" }, "ipv6Address": { "$ref": "#/components/schemas/DeviceIpv6Address-Geo-V0" } }, "minProperties": 1 }, "PhoneNumber-Geo-V0": { "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" }, "NetworkAccessIdentifier-Geo-V0": { "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" }, "DeviceIpv4Addr-Geo-V0": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "$ref": "#/components/schemas/SingleIpv4Addr-Geo-V0" }, "privateAddress": { "$ref": "#/components/schemas/SingleIpv4Addr-Geo-V0" }, "publicPort": { "$ref": "#/components/schemas/Port-Geo-V0" } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ], "example": { "publicAddress": "84.125.93.10", "publicPort": 59765 } }, "SingleIpv4Addr-Geo-V0": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4", "example": "84.125.93.10" }, "Port-Geo-V0": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 }, "DeviceIpv6Address-Geo-V0": { "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).\n", "type": "string", "format": "ipv6", "example": "2001:db8:85a3:8d3:1319:8a2e:370:7344" }, "Area-Geo-V0": { "type": "object", "properties": { "areaType": { "$ref": "#/components/schemas/AreaType-Geo-V0" } }, "required": [ "areaType" ], "discriminator": { "propertyName": "areaType", "mapping": { "CIRCLE": "#/components/schemas/Circle", "POI": "#/components/schemas/Poi" } } }, "AreaType-Geo-V0": { "type": "string", "description": "Type of this area.\nCIRCLE - The area is defined as a circle.\nPOI - The area is defined by a named point of interest.\n", "enum": [ "CIRCLE", "POI" ] }, "Circle-Geo-V0": { "description": "Circular area", "allOf": [ { "$ref": "#/components/schemas/Area-Geo-V0" }, { "type": "object", "properties": { "center": { "$ref": "#/components/schemas/Point-Geo-V0" }, "radius": { "type": "integer", "description": "Expected accuracy for the subscription event of device location in m, from location (radius)", "minimum": 2000, "maximum": 200000 } }, "required": [ "center", "radius" ] } ], "example": { "areaType": "CIRCLE", "center": { "latitude": 50.735851, "longitude": 7.10066 }, "radius": 50000 } }, "Poi-Geo-V0": { "description": "Point of interest area", "allOf": [ { "$ref": "#/components/schemas/Area-Geo-V0" }, { "type": "object", "properties": { "poiName": { "type": "string", "description": "Name of the Point of Interest for geofencing and location verification." } }, "required": [ "poiName" ] } ], "example": { "areaType": "POI", "poiName": "StatueOfLiberty" } }, "Point-Geo-V0": { "type": "object", "description": "Coordinates (latitude, longitude) defining a location in a map", "required": [ "latitude", "longitude" ], "properties": { "latitude": { "$ref": "#/components/schemas/Latitude-Geo-V0" }, "longitude": { "$ref": "#/components/schemas/Longitude-Geo-V0" } }, "example": { "latitude": 50.735851, "longitude": 7.10066 } }, "Latitude-Geo-V0": { "description": "Latitude component of a location", "type": "number", "format": "double", "minimum": -90, "maximum": 90, "example": 50.735851 }, "Longitude-Geo-V0": { "description": "Longitude component of location", "type": "number", "format": "double", "minimum": -180, "maximum": 180, "example": 7.10066 }, "CloudEvent-Geo-V0": { "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-Geo-V0" }, "type": { "$ref": "#/components/schemas/NotificationEventType-Geo-V0" }, "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-Geo-V0" } }, "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" } } }, "Source-Geo-V0": { "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\n\n\n\n\n * https://github.com/cloudevents\n * mailto:cncf-wg-serverless@lists.cncf.io\n- Universally-unique URN with a UUID:\n\n\n\n\n\n * urn:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66\n- Application-specific identifier:\n\n\n\n\n\n * /cloudevents/spec/pull/123\n * 1-555-123-4567\n", "example": "https://notificationSendServer12.supertelco.com" }, "DateTime-Geo-V0": { "type": "string", "format": "date-time", "description": "Timestamp of when the occurrence happened. Must adhere to RFC 3339.", "example": "2018-04-05T17:31:00Z" }, "EventAreaLeft-Geo-V0": { "description": "event structure for event when the device leaves the area", "allOf": [ { "$ref": "#/components/schemas/CloudEvent-Geo-V0" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/AreaLeft-Geo-V0" } } } ] }, "EventAreaEntered-Geo-V0": { "description": "event structure for event when the device enters the area", "allOf": [ { "$ref": "#/components/schemas/CloudEvent-Geo-V0" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/AreaEntered-Geo-V0" } } } ] }, "EventSubscriptionEnds-Geo-V0": { "description": "event structure for event subscription ends", "allOf": [ { "$ref": "#/components/schemas/CloudEvent-Geo-V0" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/SubscriptionEnds-Geo-V0" } } } ] }, "AreaLeft-Geo-V0": { "description": "Event detail structure for area-left event", "type": "object", "required": [ "device", "area", "subscriptionId" ], "properties": { "device": { "$ref": "#/components/schemas/Device-Geo-V0" }, "area": { "$ref": "#/components/schemas/Area-Geo-V0" }, "subscriptionId": { "$ref": "#/components/schemas/SubscriptionId-Geo-V0" } } }, "AreaEntered-Geo-V0": { "description": "Event detail structure for area-entered event", "type": "object", "required": [ "device", "area", "subscriptionId" ], "properties": { "device": { "$ref": "#/components/schemas/Device-Geo-V0" }, "area": { "$ref": "#/components/schemas/Area-Geo-V0" }, "subscriptionId": { "$ref": "#/components/schemas/SubscriptionId-Geo-V0" } } }, "SubscriptionEnds-Geo-V0": { "description": "Event detail structure for SUBSCRIPTION_ENDS event", "type": "object", "required": [ "device", "area", "terminationReason", "subscriptionId" ], "properties": { "device": { "$ref": "#/components/schemas/Device-Geo-V0" }, "area": { "$ref": "#/components/schemas/Area-Geo-V0" }, "terminationReason": { "$ref": "#/components/schemas/TerminationReason-Geo-V0" }, "terminationDescription": { "description": "Explanation why a subscription ended or had to end.", "type": "string" }, "subscriptionId": { "$ref": "#/components/schemas/SubscriptionId-Geo-V0" } } }, "TerminationReason-Geo-V0": { "type": "string", "description": "- NETWORK_TERMINATED - API server stopped sending notification\n- SUBSCRIPTION_UNPROCESSABLE - Subscription cannot be processed due to some reason, e.g. because the specified area cannot be managed. Useful for asynchronous subscription creation.\n- SUBSCRIPTION_EXPIRED - Subscription expire time (optionally set by the requester) has been reached\n- SUBSCRIPTION_DELETED - Subscription was deleted by the requester\n- MAX_EVENTS_REACHED - Maximum number of events (optionally set by the requester) has been reached\n- ACCESS_TOKEN_EXPIRED - Access Token sinkCredential (optionally set by the requester) expiration time has been reached\n", "enum": [ "MAX_EVENTS_REACHED", "NETWORK_TERMINATED", "SUBSCRIPTION_UNPROCESSABLE", "SUBSCRIPTION_EXPIRED", "SUBSCRIPTION_DELETED", "ACCESS_TOKEN_EXPIRED" ] }, "HTTPSubscriptionRequest-Geo-V0": { "allOf": [ { "$ref": "#/components/schemas/SubscriptionRequest-Geo-V0" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/HTTPSettings-Geo-V0" } } } ] }, "HTTPSubscriptionResponse-Geo-V0": { "allOf": [ { "$ref": "#/components/schemas/Subscription-Geo-V0" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/HTTPSettings-Geo-V0" } } } ] }, "HTTPSettings-Geo-V0": { "type": "object", "properties": { "headers": { "type": "object", "description": "A set of key/value pairs that is copied into the HTTP request as custom headers.\n\nNOTE: Use/Applicability of this concept has not been discussed in Commonalities under the scope of Meta Release v0.4. When required by an API project as an option to meet a UC/Requirement, please generate an issue for Commonalities discussion about it.", "additionalProperties": { "type": "string" } }, "method": { "type": "string", "description": "The HTTP method to use for sending the message.", "enum": [ "POST" ] } } }, "MQTTSubscriptionRequest-Geo-V0": { "allOf": [ { "$ref": "#/components/schemas/SubscriptionRequest-Geo-V0" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/MQTTSettings-Geo-V0" } } } ] }, "MQTTSubscriptionResponse-Geo-V0": { "allOf": [ { "$ref": "#/components/schemas/Subscription-Geo-V0" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/MQTTSettings-Geo-V0" } } } ] }, "MQTTSettings-Geo-V0": { "type": "object", "properties": { "topicName": { "type": "string" }, "qos": { "type": "integer", "format": "int32" }, "retain": { "type": "boolean" }, "expiry": { "type": "integer", "format": "int32" }, "userProperties": { "type": "object" } }, "required": [ "topicName" ] }, "AMQPSubscriptionRequest-Geo-V0": { "allOf": [ { "$ref": "#/components/schemas/SubscriptionRequest-Geo-V0" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/AMQPSettings-Geo-V0" } } } ] }, "AMQPSubscriptionResponse-Geo-V0": { "allOf": [ { "$ref": "#/components/schemas/Subscription-Geo-V0" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/AMQPSettings-Geo-V0" } } } ] }, "AMQPSettings-Geo-V0": { "type": "object", "properties": { "address": { "type": "string" }, "linkName": { "type": "string" }, "senderSettlementMode": { "type": "string", "enum": [ "settled", "unsettled" ] }, "linkProperties": { "type": "object", "additionalProperties": { "type": "string" } } } }, "ApacheKafkaSubscriptionRequest-Geo-V0": { "allOf": [ { "$ref": "#/components/schemas/SubscriptionRequest-Geo-V0" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/ApacheKafkaSettings-Geo-V0" } } } ] }, "ApacheKafkaSubscriptionResponse-Geo-V0": { "allOf": [ { "$ref": "#/components/schemas/Subscription-Geo-V0" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/ApacheKafkaSettings-Geo-V0" } } } ] }, "ApacheKafkaSettings-Geo-V0": { "type": "object", "properties": { "topicName": { "type": "string" }, "partitionKeyExtractor": { "type": "string" }, "clientId": { "type": "string" }, "ackMode": { "type": "integer" } }, "required": [ "topicName" ] }, "NATSSubscriptionRequest-Geo-V0": { "allOf": [ { "$ref": "#/components/schemas/SubscriptionRequest-Geo-V0" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/NATSSettings-Geo-V0" } } } ] }, "NATSSubscriptionResponse-Geo-V0": { "allOf": [ { "$ref": "#/components/schemas/Subscription-Geo-V0" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/NATSSettings-Geo-V0" } } } ] }, "NATSSettings-Geo-V0": { "type": "object", "properties": { "subject": { "type": "string" } }, "required": [ "subject" ] }, "RetrievalLocationRequest-LocR-V0": { "type": "object", "properties": { "device": { "$ref": "#/components/schemas/Device-LocR-V0" }, "maxAge": { "type": "integer", "description": "Maximum age of the location information which is accepted for the location retrieval (in seconds)", "minimum": 60 } }, "required": [ "device" ] }, "Device-LocR-V0": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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.\n", "type": "object", "properties": { "phoneNumber": { "$ref": "#/components/schemas/PhoneNumber-LocR-V0" }, "networkAccessIdentifier": { "$ref": "#/components/schemas/NetworkAccessIdentifier-LocR-V0" }, "ipv4Address": { "$ref": "#/components/schemas/DeviceIpv4Addr-LocR-V0" }, "ipv6Address": { "$ref": "#/components/schemas/DeviceIpv6Address-LocR-V0" } }, "minProperties": 1 }, "PhoneNumber-LocR-V0": { "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, optionally prefixed with '+'.", "type": "string", "pattern": "^\\+?[0-9]{5,15}$", "example": "123456789" }, "NetworkAccessIdentifier-LocR-V0": { "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" }, "DeviceIpv4Addr-LocR-V0": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "$ref": "#/components/schemas/SingleIpv4Addr-LocR-V0" }, "privateAddress": { "$ref": "#/components/schemas/SingleIpv4Addr-LocR-V0" }, "publicPort": { "$ref": "#/components/schemas/Port-LocR-V0" } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ], "example": { "publicAddress": "84.125.93.10", "publicPort": 59765 } }, "SingleIpv4Addr-LocR-V0": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4", "example": "84.125.93.10" }, "Port-LocR-V0": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 }, "DeviceIpv6Address-LocR-V0": { "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).\n", "type": "string", "format": "ipv6", "example": "2001:db8:85a3:8d3:1319:8a2e:370:7344" }, "Location-LocR-V0": { "type": "object", "description": "Device location", "required": [ "lastLocationTime", "area" ], "properties": { "lastLocationTime": { "description": "Last date and time when the device was localized. It must follow RFC 3339 and must have time zone. Recommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)", "type": "string", "format": "date-time" }, "area": { "$ref": "#/components/schemas/Area-LocR-V0" } } }, "Area-LocR-V0": { "type": "object", "properties": { "areaType": { "$ref": "#/components/schemas/AreaType-LocR-V0" } }, "required": [ "areaType" ], "discriminator": { "propertyName": "areaType", "mapping": { "CIRCLE": "#/components/schemas/Circle", "POLYGON": "#/components/schemas/Polygon" } } }, "AreaType-LocR-V0": { "type": "string", "description": "Type of this area.\nCIRCLE - The area is defined as a circle.\nPOLYGON - The area is defined as a polygon.\n", "enum": [ "CIRCLE", "POLYGON" ] }, "Circle-LocR-V0": { "description": "Circular area", "allOf": [ { "$ref": "#/components/schemas/Area-LocR-V0" }, { "type": "object", "required": [ "center", "radius" ], "properties": { "center": { "$ref": "#/components/schemas/Point-LocR-V0" }, "radius": { "type": "number", "description": "Distance from the center in meters", "minimum": 1 } } } ] }, "Polygon-LocR-V0": { "allOf": [ { "$ref": "#/components/schemas/Area-LocR-V0" }, { "type": "object", "required": [ "boundary" ], "properties": { "boundary": { "$ref": "#/components/schemas/PointList-LocR-V0" } } } ] }, "PointList-LocR-V0": { "type": "array", "items": { "$ref": "#/components/schemas/Point-LocR-V0" }, "minItems": 3, "maxItems": 15 }, "Point-LocR-V0": { "type": "object", "description": "Coordinates (latitude, longitude) defining a location in a map", "required": [ "latitude", "longitude" ], "properties": { "latitude": { "$ref": "#/components/schemas/Latitude-LocR-V0" }, "longitude": { "$ref": "#/components/schemas/Longitude-LocR-V0" } }, "example": { "latitude": 50.735851, "longitude": 7.10066 } }, "Latitude-LocR-V0": { "description": "Latitude component of a location", "type": "number", "format": "double", "minimum": -90, "maximum": 90 }, "Longitude-LocR-V0": { "description": "Longitude component of location", "type": "number", "format": "double", "minimum": -180, "maximum": 180 }, "ErrorInfo-LocR-V0": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } } }, "Area-LocV-V1": { "description": "Base schema for all areas", "type": "object", "properties": { "areaType": { "$ref": "#/components/schemas/AreaType-LocV-V1" } }, "required": [ "areaType" ], "discriminator": { "propertyName": "areaType", "mapping": { "CIRCLE": "#/components/schemas/Circle" } } }, "AreaType-LocV-V1": { "type": "string", "description": "Type of this area.\nCIRCLE - The area is defined as a circle.\n", "enum": [ "CIRCLE" ] }, "Circle-LocV-V1": { "description": "Circular area", "allOf": [ { "$ref": "#/components/schemas/Area-LocV-V1" }, { "type": "object", "properties": { "center": { "$ref": "#/components/schemas/Point-LocV-V1" }, "radius": { "type": "integer", "description": "Expected accuracy for the verification in meters, from center", "minimum": 2000, "maximum": 200000 } }, "required": [ "center", "radius" ] } ], "example": { "areaType": "CIRCLE", "center": { "latitude": 50.735851, "longitude": 7.10066 }, "radius": 50000 } }, "Point-LocV-V1": { "type": "object", "description": "Coordinates (latitude, longitude) defining a location in a map", "required": [ "latitude", "longitude" ], "properties": { "latitude": { "$ref": "#/components/schemas/Latitude-LocV-V1" }, "longitude": { "$ref": "#/components/schemas/Longitude-LocV-V1" } }, "example": { "latitude": 50.735851, "longitude": 7.10066 } }, "Latitude-LocV-V1": { "description": "Latitude component of a location", "type": "number", "format": "double", "minimum": -90, "maximum": 90, "example": 50.735851 }, "Longitude-LocV-V1": { "description": "Longitude component of location", "type": "number", "format": "double", "minimum": -180, "maximum": 180, "example": 7.10066 }, "VerifyLocationRequest-LocV-V1": { "description": "Request to verify the location of a device. Device is not required when using a 3-legged access token, following the rules in the description.", "type": "object", "properties": { "device": { "$ref": "#/components/schemas/Device-LocV-V1" }, "area": { "$ref": "#/components/schemas/Area-LocV-V1" }, "maxAge": { "$ref": "#/components/schemas/MaxAge-LocV-V1" } }, "required": [ "area" ] }, "VerifyLocationResponse-LocV-V1": { "description": "Response to a location verification request", "type": "object", "required": [ "verificationResult" ], "properties": { "lastLocationTime": { "$ref": "#/components/schemas/LastLocationTime-LocV-V1" }, "verificationResult": { "$ref": "#/components/schemas/VerificationResult-LocV-V1" }, "matchRate": { "$ref": "#/components/schemas/MatchRate-LocV-V1" } } }, "Device-LocV-V1": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE1: 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\nNOTE2: 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.\n", "type": "object", "properties": { "phoneNumber": { "$ref": "#/components/schemas/PhoneNumber-LocV-V1" }, "networkAccessIdentifier": { "$ref": "#/components/schemas/NetworkAccessIdentifier-LocV-V1" }, "ipv4Address": { "$ref": "#/components/schemas/DeviceIpv4Addr-LocV-V1" }, "ipv6Address": { "$ref": "#/components/schemas/DeviceIpv6Address-LocV-V1" } }, "minProperties": 1 }, "PhoneNumber-LocV-V1": { "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" }, "NetworkAccessIdentifier-LocV-V1": { "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" }, "DeviceIpv4Addr-LocV-V1": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "$ref": "#/components/schemas/SingleIpv4Addr-LocV-V1" }, "privateAddress": { "$ref": "#/components/schemas/SingleIpv4Addr-LocV-V1" }, "publicPort": { "$ref": "#/components/schemas/Port-LocV-V1" } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ], "example": { "publicAddress": "84.125.93.10", "publicPort": 59765 } }, "SingleIpv4Addr-LocV-V1": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4", "example": "84.125.93.10" }, "Port-LocV-V1": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 }, "DeviceIpv6Address-LocV-V1": { "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).\n", "type": "string", "format": "ipv6", "example": "2001:db8:85a3:8d3:1319:8a2e:370:7344" }, "MaxAge-LocV-V1": { "description": "The maximum age (in seconds) for the location known by the implementation, which is accepted for the verification. Absence of maxAge means \"any age\" and maxAge=0 means a fresh calculation.", "type": "integer", "example": 120 }, "VerificationResult-LocV-V1": { "description": "Result of a verification request:\n - `TRUE`: when the network locates the device within the requested area,\n - `FALSE`: when the requested area does not match the area where the network locates the device,\n - `UNKNOWN`: when the network cannot locate the device,\n - `PARTIAL`: when the requested area partially match the area where the network locates the device. A `match_rate` is included in the response.\n", "type": "string", "enum": [ "TRUE", "FALSE", "UNKNOWN", "PARTIAL" ] }, "MatchRate-LocV-V1": { "description": "Estimation of the match rate between the area in the request (R), and area where the network locates the device (N), calculated as the percent value of the intersection of both areas divided by the network area, that is (R ∩ N) / N * 100. Included only if VerificationResult is PARTIAL.", "type": "integer", "minimum": 1, "maximum": 99 }, "LastLocationTime-LocV-V1": { "description": "Timestamp of the last location information. It must follow RFC 3339 and must have time zone. Recommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)", "example": "2023-09-07T10:40:52Z", "format": "date-time", "type": "string" }, "ErrorInfo-LocV-V1": { "description": "Common schema for errors", "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } } }, "Area-LocV-V0": { "type": "object", "properties": { "areaType": { "$ref": "#/components/schemas/AreaType-LocV-V0" } }, "required": [ "areaType" ], "discriminator": { "propertyName": "areaType", "mapping": { "CIRCLE": "#/components/schemas/Circle" } } }, "AreaType-LocV-V0": { "type": "string", "description": "Type of this area.\nCIRCLE - The area is defined as a circle.\n", "enum": [ "CIRCLE" ] }, "Circle-LocV-V0": { "description": "Circular area", "allOf": [ { "$ref": "#/components/schemas/Area-LocV-V0" }, { "type": "object", "properties": { "center": { "$ref": "#/components/schemas/Point-LocV-V0" }, "radius": { "type": "integer", "description": "Expected accuracy for the verification in meters, from location (radius)", "minimum": 2000, "maximum": 200000 } }, "required": [ "center", "radius" ] } ], "example": { "areaType": "CIRCLE", "center": { "latitude": 50.735851, "longitude": 7.10066 }, "radius": 50000 } }, "Point-LocV-V0": { "type": "object", "description": "Coordinates (latitude, longitude) defining a location in a map", "required": [ "latitude", "longitude" ], "properties": { "latitude": { "$ref": "#/components/schemas/Latitude-LocV-V0" }, "longitude": { "$ref": "#/components/schemas/Longitude-LocV-V0" } }, "example": { "latitude": 50.735851, "longitude": 7.10066 } }, "Latitude-LocV-V0": { "description": "Latitude component of a location", "type": "number", "format": "double", "minimum": -90, "maximum": 90, "example": 50.735851 }, "Longitude-LocV-V0": { "description": "Longitude component of location", "type": "number", "format": "double", "minimum": -180, "maximum": 180, "example": 7.10066 }, "VerifyLocationRequest-LocV-V0": { "type": "object", "properties": { "device": { "$ref": "#/components/schemas/Device-LocV-V0" }, "area": { "$ref": "#/components/schemas/Area-LocV-V0" }, "maxAge": { "$ref": "#/components/schemas/MaxAge-LocV-V0" } }, "required": [ "device", "area" ] }, "VerifyLocationResponse-LocV-V0": { "type": "object", "required": [ "verificationResult" ], "properties": { "lastLocationTime": { "$ref": "#/components/schemas/LastLocationTime-LocV-V0" }, "verificationResult": { "$ref": "#/components/schemas/VerificationResult-LocV-V0" }, "matchRate": { "$ref": "#/components/schemas/MatchRate-LocV-V0" } } }, "Device-LocV-V0": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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.\n", "type": "object", "properties": { "phoneNumber": { "$ref": "#/components/schemas/PhoneNumber-LocV-V0" }, "networkAccessIdentifier": { "$ref": "#/components/schemas/NetworkAccessIdentifier-LocV-V0" }, "ipv4Address": { "$ref": "#/components/schemas/DeviceIpv4Addr-LocV-V0" }, "ipv6Address": { "$ref": "#/components/schemas/DeviceIpv6Address-LocV-V0" } }, "minProperties": 1 }, "PhoneNumber-LocV-V0": { "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, optionally prefixed with '+'.", "type": "string", "pattern": "^\\+?[0-9]{5,15}$", "example": "123456789" }, "NetworkAccessIdentifier-LocV-V0": { "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" }, "DeviceIpv4Addr-LocV-V0": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "$ref": "#/components/schemas/SingleIpv4Addr-LocV-V0" }, "privateAddress": { "$ref": "#/components/schemas/SingleIpv4Addr-LocV-V0" }, "publicPort": { "$ref": "#/components/schemas/Port-LocV-V0" } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ], "example": { "publicAddress": "84.125.93.10", "publicPort": 59765 } }, "SingleIpv4Addr-LocV-V0": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4", "example": "84.125.93.10" }, "Port-LocV-V0": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 }, "DeviceIpv6Address-LocV-V0": { "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).\n", "type": "string", "format": "ipv6", "example": "2001:db8:85a3:8d3:1319:8a2e:370:7344" }, "MaxAge-LocV-V0": { "description": "The maximum age (in seconds) of the available location, which is accepted for the verification.", "type": "integer", "minimum": 60, "example": 120 }, "VerificationResult-LocV-V0": { "description": "Result of a verification request:\n - `TRUE`: when the network locates the device within the requested area, \n - `FALSE`: when the requested area does not match the area where the network locates the device,\n - `UNKNOWN`: when the network cannot locate the device,\n - `PARTIAL`: when the requested area partially match the area where the network locates the device. A `match_rate` could be included in the response.\n", "type": "string", "enum": [ "TRUE", "FALSE", "UNKNOWN", "PARTIAL" ] }, "MatchRate-LocV-V0": { "description": "Estimation of the match rate between the area in the request (R), and area where the network locates the device (N), calculated as the percent value of the intersection of both areas divided by the network area, that is (R ∩ N) / N * 100. Included only if VerificationResult is PARTIAL.", "type": "integer", "minimum": 1, "maximum": 99 }, "LastLocationTime-LocV-V0": { "description": "Timestamp of the last location information. It must follow RFC 3339 and must have time zone. Recommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)", "example": "2023-09-07T10:40:52Z", "format": "date-time", "type": "string" }, "ErrorInfo-LocV-V0": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } } }, "ErrorInfo-DS-RES-V0": { "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" } } }, "SubscriptionRequest-DS-RES-V0": { "description": "The request for creating a event-type event subscription", "type": "object", "required": [ "sink", "protocol", "config", "types" ], "properties": { "protocol": { "$ref": "#/components/schemas/Protocol-DS-RES-V0" }, "sink": { "type": "string", "format": "uri", "description": "The address to which events shall be delivered using the selected protocol.", "example": "https://endpoint.example.com/sink" }, "sinkCredential": { "$ref": "#/components/schemas/SinkCredential-DS-RES-V0" }, "types": { "description": "Camara Event types eligible to be delivered by this subscription.\nNote: For the current Commonalities API design guidelines, only one event type per subscription is allowed, yet in the following releases use of array of event types SHALL be specified without changing this definition.\n", "type": "array", "minItems": 1, "maxItems": 1, "items": { "$ref": "#/components/schemas/SubscriptionEventType-DS-RES-V0" } }, "config": { "$ref": "#/components/schemas/Config-DS-RES-V0" } }, "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" } } }, "Protocol-DS-RES-V0": { "type": "string", "enum": [ "HTTP", "MQTT3", "MQTT5", "AMQP", "NATS", "KAFKA" ], "description": "Identifier of a delivery protocol. Only HTTP is allowed for now", "example": "HTTP" }, "Config-DS-RES-V0": { "description": "Implementation-specific configuration parameters needed by the subscription manager for acquiring events.\nIn CAMARA we have predefined attributes like `subscriptionExpireTime`, `subscriptionMaxEvents`, `initialEvent`\nSpecific event type attributes must be defined in `subscriptionDetail`\nNote: if a request is performed for several event type, all subscribed event will use same `config` parameters.\n", "type": "object", "required": [ "subscriptionDetail" ], "properties": { "subscriptionDetail": { "$ref": "#/components/schemas/CreateSubscriptionDetail-DS-RES-V0" }, "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. Up to API project decision to keep it." }, "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. Up to API project decision to keep it.", "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.Up to API project decision to keep it.\nExample: Consumer subscribes to reachability SMS. If consumer sets initialEvent to true and device is already reachable by SMS, an event is triggered.\n" } } }, "SinkCredential-DS-RES-V0": { "description": "A sink credential provides authentication or authorization information necessary to enable delivery of events to a target.", "type": "object", "properties": { "credentialType": { "type": "string", "enum": [ "PLAIN", "ACCESSTOKEN", "REFRESHTOKEN" ], "description": "The type of the credential.\nNote: Type of the credential - MUST be set to ACCESSTOKEN for now\n" } }, "discriminator": { "propertyName": "credentialType", "mapping": { "PLAIN": "#/components/schemas/PlainCredential", "ACCESSTOKEN": "#/components/schemas/AccessTokenCredential", "REFRESHTOKEN": "#/components/schemas/RefreshTokenCredential" } }, "required": [ "credentialType" ] }, "PlainCredential-DS-RES-V0": { "type": "object", "description": "A plain credential as a combination of an identifier and a secret.", "allOf": [ { "$ref": "#/components/schemas/SinkCredential-DS-RES-V0" }, { "type": "object", "required": [ "identifier", "secret" ], "properties": { "identifier": { "description": "The identifier might be an account or username.", "type": "string" }, "secret": { "description": "The secret might be a password or passphrase.", "type": "string" } } } ] }, "AccessTokenCredential-DS-RES-V0": { "type": "object", "description": "An access token credential.", "allOf": [ { "$ref": "#/components/schemas/SinkCredential-DS-RES-V0" }, { "type": "object", "properties": { "accessToken": { "description": "REQUIRED. An access token is a previously acquired token granting access to the target resource.", "type": "string" }, "accessTokenExpiresUtc": { "type": "string", "format": "date-time", "description": "REQUIRED. An absolute (UTC) timestamp at which the token shall be considered expired.\nIn the case of an ACCESS_TOKEN_EXPIRED termination reason, implementation should notify the client before the expiration date.\nIf the access token is a JWT and registered \"exp\" (Expiration Time) claim is present, the two expiry times should match.\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\nRecommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)\n", "example": "2023-07-03T12:27:08.312Z" }, "accessTokenType": { "description": "REQUIRED. Type of the access token (See [OAuth 2.0](https://tools.ietf.org/html/rfc6749#section-7.1)).", "type": "string", "enum": [ "bearer" ] } }, "required": [ "accessToken", "accessTokenExpiresUtc", "accessTokenType" ] } ] }, "RefreshTokenCredential-DS-RES-V0": { "type": "object", "description": "An access token credential with a refresh token.", "allOf": [ { "$ref": "#/components/schemas/SinkCredential-DS-RES-V0" }, { "type": "object", "properties": { "accessToken": { "description": "REQUIRED. An access token is a previously acquired token granting access to the target resource.", "type": "string" }, "accessTokenExpiresUtc": { "type": "string", "format": "date-time", "description": "REQUIRED. An absolute (UTC) timestamp at which the token shall be considered expired.\nIn the case of an ACCESS_TOKEN_EXPIRED termination reason, implementation should notify the client before the expiration date.\nIf the access token is a JWT and registered \"exp\" (Expiration Time) claim is present, the two expiry times should match.\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\nRecommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)\n", "example": "2023-07-03T12:27:08.312Z" }, "accessTokenType": { "description": "REQUIRED. Type of the access token (See [OAuth 2.0](https://tools.ietf.org/html/rfc6749#section-7.1)).", "type": "string", "enum": [ "bearer" ] }, "refreshToken": { "description": "REQUIRED. An refresh token credential used to acquire access tokens.", "type": "string" }, "refreshTokenEndpoint": { "type": "string", "format": "uri", "description": "REQUIRED. A URL at which the refresh token can be traded for an access token." } } } ], "required": [ "accessToken", "accessTokenExpiresUtc", "accessTokenType", "refreshToken", "refreshTokenEndpoint" ] }, "CreateSubscriptionDetail-DS-RES-V0": { "description": "The detail of the requested event subscription.", "type": "object", "properties": { "device": { "$ref": "#/components/schemas/Device-DS-RES-V0" } } }, "EventTypeNotification-DS-RES-V0": { "type": "string", "description": "reachability-data - Event triggered when the device is connected to the network for Data usage (regardless of the SMS reachability).\n\nreachability-sms - Event triggered when the device is connected to the network only for SMS usage\n\nreachability-disconnected - Event triggered when the device is not connected.\n\nsubscription-ends - Event triggered when the subscription is terminated\n", "enum": [ "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-data", "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-sms", "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-disconnected", "org.camaraproject.device-reachability-status-subscriptions.v0.subscription-ends" ] }, "SubscriptionEventType-DS-RES-V0": { "type": "string", "description": "reachability-data - Event triggered when the device is connected to the network for Data usage (regardless of the SMS reachability).\n\nreachability-sms - Event triggered when the device is connected to the network only for SMS usage\n\nreachability-disconnected - Event triggered when the device is not connected.\n", "enum": [ "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-data", "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-sms", "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-disconnected" ] }, "Subscription-DS-RES-V0": { "description": "Represents a event-type subscription.", "type": "object", "required": [ "sink", "protocol", "config", "types", "id" ], "properties": { "protocol": { "$ref": "#/components/schemas/Protocol-DS-RES-V0" }, "sink": { "type": "string", "format": "url", "description": "The address to which events shall be delivered using the selected protocol.", "example": "https://endpoint.example.com/sink" }, "types": { "description": "Camara Event types eligible to be delivered by this subscription.\nNote: For the current Commonalities API design guidelines, only one event type per subscription is allowed\n", "type": "array", "minItems": 1, "maxItems": 1, "items": { "$ref": "#/components/schemas/SubscriptionEventType-DS-RES-V0" } }, "config": { "$ref": "#/components/schemas/Config-DS-RES-V0" }, "id": { "$ref": "#/components/schemas/SubscriptionId-DS-RES-V0" }, "startsAt": { "type": "string", "format": "date-time", "description": "Date when the event subscription will begin/began\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\nRecommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)\n", "example": "2023-07-03T12:27:08.312Z" }, "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.\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\nRecommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)\n", "example": "2023-07-03T12:27:08.312Z" }, "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\n\n\n\n\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" } }, "example": { "id": "550e8400-e29b-41d4-a716-446655440000", "sink": "https://endpoint.example.com/sink", "protocol": "HTTP", "types": [ "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-data" ], "config": { "subscriptionDetail": { "device": { "phoneNumber": "+99999991000" } }, "subscriptionExpireTime": "2024-07-17T13:18:23.682Z", "subscriptionMaxEvents": 5, "initialEvent": true }, "startsAt": "2024-07-03T21:12:02.871Z", "expiresAt": "2024-07-03T21:12:02.871Z", "status": "ACTIVE" } }, "Device-DS-RES-V0": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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.\n", "type": "object", "properties": { "phoneNumber": { "$ref": "#/components/schemas/PhoneNumber-DS-RES-V0" }, "networkAccessIdentifier": { "$ref": "#/components/schemas/NetworkAccessIdentifier-DS-RES-V0" }, "ipv4Address": { "$ref": "#/components/schemas/DeviceIpv4Addr-DS-RES-V0" }, "ipv6Address": { "$ref": "#/components/schemas/DeviceIpv6Address-DS-RES-V0" } }, "minProperties": 1 }, "PhoneNumber-DS-RES-V0": { "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": "+99999991000" }, "NetworkAccessIdentifier-DS-RES-V0": { "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" }, "DeviceIpv4Addr-DS-RES-V0": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "$ref": "#/components/schemas/SingleIpv4Addr-DS-RES-V0" }, "privateAddress": { "$ref": "#/components/schemas/SingleIpv4Addr-DS-RES-V0" }, "publicPort": { "$ref": "#/components/schemas/Port-DS-RES-V0" } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ], "example": { "publicAddress": "84.125.93.10", "publicPort": 59765 } }, "SingleIpv4Addr-DS-RES-V0": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4", "example": "84.125.93.10" }, "Port-DS-RES-V0": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 }, "DeviceIpv6Address-DS-RES-V0": { "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).\n", "type": "string", "format": "ipv6", "example": "2001:db8:85a3:8d3:1319:8a2e:370:7344" }, "SubscriptionAsync-DS-RES-V0": { "description": "Response for a device reachability status operation managed asynchronously (Creation or Deletion)", "type": "object", "properties": { "id": { "$ref": "#/components/schemas/SubscriptionId-DS-RES-V0" } } }, "SubscriptionId-DS-RES-V0": { "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/r2.3/documentation/API-design-guidelines.md#122-event-notification).", "example": "qs15-h556-rt89-1298" }, "CloudEvent-DS-RES-V0": { "description": "The notification callback", "required": [ "id", "source", "specversion", "type", "time" ], "properties": { "id": { "type": "string", "description": "identifier of this event, that must be unique in the source context." }, "source": { "$ref": "#/components/schemas/Source-DS-RES-V0" }, "type": { "$ref": "#/components/schemas/EventTypeNotification-DS-RES-V0" }, "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-DS-RES-V0" } }, "discriminator": { "propertyName": "type", "mapping": { "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-data": "#/components/schemas/EventReachabilityData", "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-sms": "#/components/schemas/EventReachabilitySms", "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-disconnected": "#/components/schemas/EventReachabilityDisconnected", "org.camaraproject.device-reachability-status-subscriptions.v0.subscription-ends": "#/components/schemas/EventSubscriptionEnds" } } }, "Source-DS-RES-V0": { "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\n\n\n\n\n * https://github.com/cloudevents\n * mailto:cncf-wg-serverless@lists.cncf.io\n- Universally-unique URN with a UUID:\n\n\n\n\n\n * urn:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66\n- Application-specific identifier:\n\n\n\n\n\n * /cloudevents/spec/pull/123\n * 1-555-123-4567\n", "example": "https://notificationSendServer12.supertelco.com" }, "DateTime-DS-RES-V0": { "type": "string", "format": "date-time", "description": "Timestamp of when the occurrence happened.\nIf the time of the occurrence cannot be determined then this attribute MAY be set to some other time (such as the current time) by the CloudEvents producer,\nhowever all producers for the same source MUST be consistent in this respect. In other words,\neither they all use the actual time of the occurrence or they all use the same algorithm to determine the value used.\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\nRecommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)\n", "example": "2018-04-05T17:31:00Z" }, "EventReachabilityData-DS-RES-V0": { "description": "event structure for reachability data usage", "allOf": [ { "$ref": "#/components/schemas/CloudEvent-DS-RES-V0" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/ReachabilityDataSmsDisconnected-DS-RES-V0" } } } ] }, "EventReachabilitySms-DS-RES-V0": { "description": "event structure for reachability SMS usage", "allOf": [ { "$ref": "#/components/schemas/CloudEvent-DS-RES-V0" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/ReachabilityDataSmsDisconnected-DS-RES-V0" } } } ] }, "EventReachabilityDisconnected-DS-RES-V0": { "description": "event structure for disconnection", "allOf": [ { "$ref": "#/components/schemas/CloudEvent-DS-RES-V0" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/ReachabilityDataSmsDisconnected-DS-RES-V0" } } } ] }, "ReachabilityDataSmsDisconnected-DS-RES-V0": { "required": [ "subscriptionId" ], "properties": { "device": { "$ref": "#/components/schemas/Device-DS-RES-V0" }, "subscriptionId": { "$ref": "#/components/schemas/SubscriptionId-DS-RES-V0" } } }, "EventSubscriptionEnds-DS-RES-V0": { "description": "event structure for event subscription ends", "allOf": [ { "$ref": "#/components/schemas/CloudEvent-DS-RES-V0" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/SubscriptionEnds-DS-RES-V0" } } } ] }, "SubscriptionEnds-DS-RES-V0": { "description": "Event detail structure for org.camaraproject.device-reachability-status-subscriptions.v0.subscription-ends event", "type": "object", "required": [ "terminationReason", "subscriptionId" ], "properties": { "device": { "$ref": "#/components/schemas/Device-DS-RES-V0" }, "terminationReason": { "$ref": "#/components/schemas/TerminationReason-DS-RES-V0" }, "subscriptionId": { "$ref": "#/components/schemas/SubscriptionId-DS-RES-V0" }, "terminationDescription": { "type": "string" } } }, "TerminationReason-DS-RES-V0": { "type": "string", "description": "- NETWORK_TERMINATED - API server stopped sending notification\n- SUBSCRIPTION_EXPIRED - Subscription expire time (optionally set by the requester) has been reached\n- MAX_EVENTS_REACHED - Maximum number of events (optionally set by the requester) has been reached\n- ACCESS_TOKEN_EXPIRED - Access Token sinkCredential (optionally set by the requester) expiration time has been reached\n- SUBSCRIPTION_DELETED - Subscription was deleted by the requester\n", "enum": [ "MAX_EVENTS_REACHED", "NETWORK_TERMINATED", "SUBSCRIPTION_EXPIRED", "ACCESS_TOKEN_EXPIRED", "SUBSCRIPTION_DELETED" ] }, "HTTPSubscriptionRequest-DS-RES-V0": { "allOf": [ { "$ref": "#/components/schemas/SubscriptionRequest-DS-RES-V0" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/HTTPSettings-DS-RES-V0" } } } ] }, "HTTPSubscriptionResponse-DS-RES-V0": { "allOf": [ { "$ref": "#/components/schemas/Subscription-DS-RES-V0" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/HTTPSettings-DS-RES-V0" } } } ] }, "HTTPSettings-DS-RES-V0": { "type": "object", "properties": { "headers": { "type": "object", "description": "A set of key/value pairs that is copied into the HTTP request as custom headers.\n\nNOTE: Use/Applicability of this concept has not been discussed in Commonalities under the scope of Meta Release v0.4. When required by an API project as an option to meet a UC/Requirement, please generate an issue for Commonalities discussion about it.", "additionalProperties": { "type": "string" } }, "method": { "type": "string", "description": "The HTTP method to use for sending the message.", "enum": [ "POST" ] } } }, "MQTTSubscriptionRequest-DS-RES-V0": { "allOf": [ { "$ref": "#/components/schemas/SubscriptionRequest-DS-RES-V0" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/MQTTSettings-DS-RES-V0" } } } ] }, "MQTTSubscriptionResponse-DS-RES-V0": { "allOf": [ { "$ref": "#/components/schemas/Subscription-DS-RES-V0" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/MQTTSettings-DS-RES-V0" } } } ] }, "MQTTSettings-DS-RES-V0": { "type": "object", "properties": { "topicName": { "type": "string" }, "qos": { "type": "integer", "format": "int32" }, "retain": { "type": "boolean" }, "expiry": { "type": "integer", "format": "int32" }, "userProperties": { "type": "object" } }, "required": [ "topicName" ] }, "AMQPSubscriptionRequest-DS-RES-V0": { "allOf": [ { "$ref": "#/components/schemas/SubscriptionRequest-DS-RES-V0" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/AMQPSettings-DS-RES-V0" } } } ] }, "AMQPSubscriptionResponse-DS-RES-V0": { "allOf": [ { "$ref": "#/components/schemas/Subscription-DS-RES-V0" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/AMQPSettings-DS-RES-V0" } } } ] }, "AMQPSettings-DS-RES-V0": { "type": "object", "properties": { "address": { "type": "string" }, "linkName": { "type": "string" }, "senderSettlementMode": { "type": "string", "enum": [ "settled", "unsettled" ] }, "linkProperties": { "type": "object", "additionalProperties": { "type": "string" } } } }, "ApacheKafkaSubscriptionRequest-DS-RES-V0": { "allOf": [ { "$ref": "#/components/schemas/SubscriptionRequest-DS-RES-V0" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/ApacheKafkaSettings-DS-RES-V0" } } } ] }, "ApacheKafkaSubscriptionResponse-DS-RES-V0": { "allOf": [ { "$ref": "#/components/schemas/Subscription-DS-RES-V0" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/ApacheKafkaSettings-DS-RES-V0" } } } ] }, "ApacheKafkaSettings-DS-RES-V0": { "type": "object", "properties": { "topicName": { "type": "string" }, "partitionKeyExtractor": { "type": "string" }, "clientId": { "type": "string" }, "ackMode": { "type": "integer" } }, "required": [ "topicName" ] }, "NATSSubscriptionRequest-DS-RES-V0": { "allOf": [ { "$ref": "#/components/schemas/SubscriptionRequest-DS-RES-V0" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/NATSSettings-DS-RES-V0" } } } ] }, "NATSSubscriptionResponse-DS-RES-V0": { "allOf": [ { "$ref": "#/components/schemas/Subscription-DS-RES-V0" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/NATSSettings-DS-RES-V0" } } } ] }, "NATSSettings-DS-RES-V0": { "type": "object", "properties": { "subject": { "type": "string" } }, "required": [ "subject" ] }, "ErrorInfo-DS-ROS-V0": { "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" } } }, "SubscriptionRequest-DS-ROS-V0": { "description": "The request for creating a event-type event subscription", "type": "object", "required": [ "sink", "protocol", "config", "types" ], "properties": { "protocol": { "$ref": "#/components/schemas/Protocol-DS-ROS-V0" }, "sink": { "type": "string", "format": "uri", "description": "The address to which events shall be delivered using the selected protocol.", "example": "https://endpoint.example.com/sink" }, "sinkCredential": { "$ref": "#/components/schemas/SinkCredential-DS-ROS-V0" }, "types": { "description": "Camara Event types eligible to be delivered by this subscription.\nNote: for the current Commonalities version (v0.5) only one event type per subscription is allowed, yet in the following releases use of array of event types SHALL be specified without changing this definition.\n", "type": "array", "minItems": 1, "maxItems": 1, "items": { "$ref": "#/components/schemas/SubscriptionEventType-DS-ROS-V0" } }, "config": { "$ref": "#/components/schemas/Config-DS-ROS-V0" } }, "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" } } }, "Protocol-DS-ROS-V0": { "type": "string", "enum": [ "HTTP", "MQTT3", "MQTT5", "AMQP", "NATS", "KAFKA" ], "description": "Identifier of a delivery protocol. Only HTTP is allowed for now", "example": "HTTP" }, "Config-DS-ROS-V0": { "description": "Implementation-specific configuration parameters needed by the subscription manager for acquiring events.\nIn CAMARA we have predefined attributes like `subscriptionExpireTime`, `subscriptionMaxEvents`, `initialEvent`\nSpecific event type attributes must be defined in `subscriptionDetail`\nNote: if a request is performed for several event type, all subscribed event will use same `config` parameters.\n", "type": "object", "required": [ "subscriptionDetail" ], "properties": { "subscriptionDetail": { "$ref": "#/components/schemas/CreateSubscriptionDetail-DS-ROS-V0" }, "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. Up to API project decision to keep it." }, "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. Up to API project decision to keep it.", "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.Up to API project decision to keep it.\nExample: Consumer request Roaming event. If consumer sets initialEvent to true and device is in roaming situation, an event is triggered\nUp to API project decision to keep it.\n" } } }, "SinkCredential-DS-ROS-V0": { "description": "A sink credential provides authentication or authorization information necessary to enable delivery of events to a target.", "type": "object", "properties": { "credentialType": { "type": "string", "enum": [ "PLAIN", "ACCESSTOKEN", "REFRESHTOKEN" ], "description": "The type of the credential.\nNote: Type of the credential - MUST be set to ACCESSTOKEN for now\n" } }, "discriminator": { "propertyName": "credentialType", "mapping": { "PLAIN": "#/components/schemas/PlainCredential", "ACCESSTOKEN": "#/components/schemas/AccessTokenCredential", "REFRESHTOKEN": "#/components/schemas/RefreshTokenCredential" } }, "required": [ "credentialType" ] }, "PlainCredential-DS-ROS-V0": { "type": "object", "description": "A plain credential as a combination of an identifier and a secret.", "allOf": [ { "$ref": "#/components/schemas/SinkCredential-DS-ROS-V0" }, { "type": "object", "required": [ "identifier", "secret" ], "properties": { "identifier": { "description": "The identifier might be an account or username.", "type": "string" }, "secret": { "description": "The secret might be a password or passphrase.", "type": "string" } } } ] }, "AccessTokenCredential-DS-ROS-V0": { "type": "object", "description": "An access token credential.", "allOf": [ { "$ref": "#/components/schemas/SinkCredential-DS-ROS-V0" }, { "type": "object", "properties": { "accessToken": { "description": "REQUIRED. An access token is a previously acquired token granting access to the target resource.", "type": "string" }, "accessTokenExpiresUtc": { "type": "string", "format": "date-time", "description": "REQUIRED. An absolute (UTC) timestamp at which the token shall be considered expired.\nIn the case of an ACCESS_TOKEN_EXPIRED termination reason, implementation should notify the client before the expiration date.\nIf the access token is a JWT and registered \"exp\" (Expiration Time) claim is present, the two expiry times should match.\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\nRecommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)\n", "example": "2023-07-03T12:27:08.312Z" }, "accessTokenType": { "description": "REQUIRED. Type of the access token (See [OAuth 2.0](https://tools.ietf.org/html/rfc6749#section-7.1)).", "type": "string", "enum": [ "bearer" ] } }, "required": [ "accessToken", "accessTokenExpiresUtc", "accessTokenType" ] } ] }, "RefreshTokenCredential-DS-ROS-V0": { "type": "object", "description": "An access token credential with a refresh token.", "allOf": [ { "$ref": "#/components/schemas/SinkCredential-DS-ROS-V0" }, { "type": "object", "properties": { "accessToken": { "description": "REQUIRED. An access token is a previously acquired token granting access to the target resource.", "type": "string" }, "accessTokenExpiresUtc": { "type": "string", "format": "date-time", "description": "REQUIRED. An absolute (UTC) timestamp at which the token shall be considered expired.\nIn the case of an ACCESS_TOKEN_EXPIRED termination reason, implementation should notify the client before the expiration date.\nIf the access token is a JWT and registered \"exp\" (Expiration Time) claim is present, the two expiry times should match.\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\nRecommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)\n", "example": "2023-07-03T12:27:08.312Z" }, "accessTokenType": { "description": "REQUIRED. Type of the access token (See [OAuth 2.0](https://tools.ietf.org/html/rfc6749#section-7.1)).", "type": "string", "enum": [ "bearer" ] }, "refreshToken": { "description": "REQUIRED. An refresh token credential used to acquire access tokens.", "type": "string" }, "refreshTokenEndpoint": { "type": "string", "format": "uri", "description": "REQUIRED. A URL at which the refresh token can be traded for an access token." } } } ], "required": [ "accessToken", "accessTokenExpiresUtc", "accessTokenType", "refreshToken", "refreshTokenEndpoint" ] }, "CreateSubscriptionDetail-DS-ROS-V0": { "description": "The detail of the requested event subscription.", "type": "object", "properties": { "device": { "$ref": "#/components/schemas/Device-DS-ROS-V0" } } }, "EventTypeNotification-DS-ROS-V0": { "type": "string", "description": "roaming-status - Event triggered when the device switch from roaming ON to roaming OFF and conversely\n\nroaming-on - Event triggered when the device switch from roaming OFF to roaming ON\n\nroaming-off - Event triggered when the device switch from roaming ON to roaming OFF\n\nroaming-change-country - Event triggered when the device in roaming change country code\n\nsubscription-ends - Event triggered when the subscription is terminated\n", "enum": [ "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-status", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-on", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-off", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-change-country", "org.camaraproject.device-roaming-status-subscriptions.v0.subscription-ends" ] }, "SubscriptionEventType-DS-ROS-V0": { "type": "string", "description": "roaming-status - Event triggered when the device switch from roaming ON to roaming OFF and conversely\n\nroaming-on - Event triggered when the device switch from roaming OFF to roaming ON\n\nroaming-off - Event triggered when the device switch from roaming ON to roaming OFF\n\nroaming-change-country - Event triggered when the device in roaming change country code\n", "enum": [ "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-status", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-on", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-off", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-change-country" ] }, "Subscription-DS-ROS-V0": { "description": "Represents a event-type subscription.", "type": "object", "required": [ "sink", "protocol", "config", "types", "id" ], "properties": { "protocol": { "$ref": "#/components/schemas/Protocol-DS-ROS-V0" }, "sink": { "type": "string", "format": "url", "description": "The address to which events shall be delivered using the selected protocol.", "example": "https://endpoint.example.com/sink" }, "types": { "description": "Camara Event types eligible to be delivered by this subscription.\nNote: for the Commonalities meta-release v0.4 we enforce to have only event type per subscription then for following meta-release use of array MUST be decided\n\n\n\n\n\n at API project level.\n", "type": "array", "minItems": 1, "maxItems": 1, "items": { "$ref": "#/components/schemas/SubscriptionEventType-DS-ROS-V0" } }, "config": { "$ref": "#/components/schemas/Config-DS-ROS-V0" }, "id": { "$ref": "#/components/schemas/SubscriptionId-DS-ROS-V0" }, "startsAt": { "type": "string", "format": "date-time", "description": "Date when the event subscription will begin/began\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\nRecommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)\n", "example": "2023-07-03T12:27:08.312Z" }, "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.\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\nRecommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)\n", "example": "2023-07-03T12:27:08.312Z" }, "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\n\n\n\n\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" } }, "example": { "id": "550e8400-e29b-41d4-a716-446655440000", "sink": "https://endpoint.example.com/sink", "protocol": "HTTP", "types": [ "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-status" ], "config": { "subscriptionDetail": { "device": { "phoneNumber": "+99999991000" } }, "subscriptionExpireTime": "2024-07-17T13:18:23.682Z", "subscriptionMaxEvents": 5, "initialEvent": true }, "startsAt": "2024-07-03T21:12:02.871Z", "expiresAt": "2024-07-03T21:12:02.871Z", "status": "ACTIVE" } }, "Device-DS-ROS-V0": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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.\n", "type": "object", "properties": { "phoneNumber": { "$ref": "#/components/schemas/PhoneNumber-DS-ROS-V0" }, "networkAccessIdentifier": { "$ref": "#/components/schemas/NetworkAccessIdentifier-DS-ROS-V0" }, "ipv4Address": { "$ref": "#/components/schemas/DeviceIpv4Addr-DS-ROS-V0" }, "ipv6Address": { "$ref": "#/components/schemas/DeviceIpv6Address-DS-ROS-V0" } }, "minProperties": 1 }, "PhoneNumber-DS-ROS-V0": { "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": "+99999991000" }, "NetworkAccessIdentifier-DS-ROS-V0": { "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" }, "DeviceIpv4Addr-DS-ROS-V0": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "$ref": "#/components/schemas/SingleIpv4Addr-DS-ROS-V0" }, "privateAddress": { "$ref": "#/components/schemas/SingleIpv4Addr-DS-ROS-V0" }, "publicPort": { "$ref": "#/components/schemas/Port-DS-ROS-V0" } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ], "example": { "publicAddress": "84.125.93.10", "publicPort": 59765 } }, "SingleIpv4Addr-DS-ROS-V0": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4", "example": "84.125.93.10" }, "Port-DS-ROS-V0": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 }, "DeviceIpv6Address-DS-ROS-V0": { "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).\n", "type": "string", "format": "ipv6", "example": "2001:db8:85a3:8d3:1319:8a2e:370:7344" }, "CountryCode-DS-ROS-V0": { "description": "The Mobile country code (MCC) as an geographic region identifier for the country and the dependent areas.", "type": "integer" }, "CountryName-DS-ROS-V0": { "description": "The ISO 3166 ALPHA-2 country-codes of mapped to mobile country code(MCC). If there is mapping of one MCC to multiple countries, then we have list of countries. If there is no mapping of MCC to any country, then an empty array [] shall be returned..", "type": "array", "items": { "type": "string" } }, "NotificationEventType-DS-ROS-V0": { "type": "string", "description": "roaming-status - Event triggered when the device switch from roaming ON to roaming OFF and conversely\n\nroaming-on - Event triggered when the device switch from roaming OFF to roaming ON\n\nroaming-off - Event triggered when the device switch from roaming ON to roaming OFF\n\nroaming-change-country - Event triggered when the device in roaming change country code\n\nsubscription-ends - Event triggered when the subscription is terminated\n", "enum": [ "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-status", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-on", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-off", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-change-country", "org.camaraproject.device-roaming-status-subscriptions.v0.subscription-ends" ] }, "SubscriptionAsync-DS-ROS-V0": { "description": "Response for a device reachability status operation managed asynchronously (Creation or Deletion)", "type": "object", "properties": { "id": { "$ref": "#/components/schemas/SubscriptionId-DS-ROS-V0" } } }, "SubscriptionId-DS-ROS-V0": { "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/r2.3/documentation/API-design-guidelines.md#122-event-notification).", "example": "qs15-h556-rt89-1298" }, "CloudEvent-DS-ROS-V0": { "description": "The notification callback", "required": [ "id", "source", "specversion", "type", "time" ], "properties": { "id": { "type": "string", "description": "identifier of this event, that must be unique in the source context." }, "source": { "$ref": "#/components/schemas/Source-DS-ROS-V0" }, "type": { "$ref": "#/components/schemas/EventTypeNotification-DS-ROS-V0" }, "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-DS-ROS-V0" } }, "discriminator": { "propertyName": "type", "mapping": { "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-status": "#/components/schemas/EventRoamingStatus", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-change-country": "#/components/schemas/EventRoamingChangeCountry", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-off": "#/components/schemas/EventRoamingOff", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-on": "#/components/schemas/EventRoamingOn", "org.camaraproject.device-roaming-status-subscriptions.v0.subscription-ends": "#/components/schemas/EventSubscriptionEnds" } } }, "Source-DS-ROS-V0": { "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\n\n\n\n\n * https://github.com/cloudevents\n * mailto:cncf-wg-serverless@lists.cncf.io\n- Universally-unique URN with a UUID:\n\n\n\n\n\n * urn:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66\n- Application-specific identifier:\n\n\n\n\n\n * /cloudevents/spec/pull/123\n * 1-555-123-4567\n", "example": "https://notificationSendServer12.supertelco.com" }, "DateTime-DS-ROS-V0": { "type": "string", "format": "date-time", "description": "Timestamp of when the occurrence happened. Must adhere to RFC 3339.", "example": "2018-04-05T17:31:00Z" }, "EventRoamingStatus-DS-ROS-V0": { "description": "event structure for roaming status change", "allOf": [ { "$ref": "#/components/schemas/CloudEvent-DS-ROS-V0" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/RoamingStatus-DS-ROS-V0" } } } ] }, "EventRoamingOn-DS-ROS-V0": { "description": "event structure for roaming on change", "allOf": [ { "$ref": "#/components/schemas/CloudEvent-DS-ROS-V0" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/BasicDeviceEventData-DS-ROS-V0" } } } ] }, "EventRoamingOff-DS-ROS-V0": { "description": "event structure for roaming off change", "allOf": [ { "$ref": "#/components/schemas/CloudEvent-DS-ROS-V0" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/BasicDeviceEventData-DS-ROS-V0" } } } ] }, "EventRoamingChangeCountry-DS-ROS-V0": { "description": "event structure for roaming change country", "allOf": [ { "$ref": "#/components/schemas/CloudEvent-DS-ROS-V0" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/RoamingChangeCountry-DS-ROS-V0" } } } ] }, "EventSubscriptionEnds-DS-ROS-V0": { "description": "event structure for event subscription ends", "allOf": [ { "$ref": "#/components/schemas/CloudEvent-DS-ROS-V0" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/SubscriptionEnds-DS-ROS-V0" } } } ] }, "BasicDeviceEventData-DS-ROS-V0": { "description": "Event detail structure for basic device events", "type": "object", "required": [ "subscriptionId" ], "properties": { "device": { "$ref": "#/components/schemas/Device-DS-ROS-V0" }, "subscriptionId": { "$ref": "#/components/schemas/SubscriptionId-DS-ROS-V0" } } }, "RoamingStatus-DS-ROS-V0": { "description": "Event detail structure for org.camaraproject.device-roaming-status-subscriptions.v0.roaming-status event", "allOf": [ { "$ref": "#/components/schemas/BasicDeviceEventData-DS-ROS-V0" }, { "type": "object", "required": [ "roaming" ], "properties": { "roaming": { "type": "boolean", "description": "Roaming status. True, if it is roaming." }, "countryCode": { "$ref": "#/components/schemas/CountryCode-DS-ROS-V0" }, "countryName": { "$ref": "#/components/schemas/CountryName-DS-ROS-V0" } } } ] }, "RoamingChangeCountry-DS-ROS-V0": { "description": "Event detail structure for org.camaraproject.device-roaming-status-subscriptions.v0.roaming-on event", "allOf": [ { "$ref": "#/components/schemas/BasicDeviceEventData-DS-ROS-V0" }, { "type": "object", "required": [ "countryCode", "countryName" ], "properties": { "countryCode": { "$ref": "#/components/schemas/CountryCode-DS-ROS-V0" }, "countryName": { "$ref": "#/components/schemas/CountryName-DS-ROS-V0" } } } ] }, "SubscriptionEnds-DS-ROS-V0": { "description": "Event detail structure for org.camaraproject.device-roaming-status-subscriptions.v0.subscription-ends event", "allOf": [ { "$ref": "#/components/schemas/BasicDeviceEventData-DS-ROS-V0" }, { "type": "object", "required": [ "countryCode" ] } ], "required": [ "terminationReason" ], "properties": { "terminationReason": { "$ref": "#/components/schemas/TerminationReason-DS-ROS-V0" }, "terminationDescription": { "type": "string" } } }, "TerminationReason-DS-ROS-V0": { "type": "string", "description": "- NETWORK_TERMINATED - API server stopped sending notification\n- SUBSCRIPTION_EXPIRED - Subscription expire time (optionally set by the requester) has been reached\n- MAX_EVENTS_REACHED - Maximum number of events (optionally set by the requester) has been reached\n- ACCESS_TOKEN_EXPIRED - Access Token sinkCredential (optionally set by the requester) expiration time has been reached\n- SUBSCRIPTION_DELETED - Subscription was deleted by the requester\n", "enum": [ "MAX_EVENTS_REACHED", "NETWORK_TERMINATED", "SUBSCRIPTION_EXPIRED", "ACCESS_TOKEN_EXPIRED", "SUBSCRIPTION_DELETED" ] }, "HTTPSubscriptionRequest-DS-ROS-V0": { "allOf": [ { "$ref": "#/components/schemas/SubscriptionRequest-DS-ROS-V0" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/HTTPSettings-DS-ROS-V0" } } } ] }, "HTTPSubscriptionResponse-DS-ROS-V0": { "allOf": [ { "$ref": "#/components/schemas/Subscription-DS-ROS-V0" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/HTTPSettings-DS-ROS-V0" } } } ] }, "HTTPSettings-DS-ROS-V0": { "type": "object", "properties": { "headers": { "type": "object", "description": "A set of key/value pairs that is copied into the HTTP request as custom headers.\n\nNOTE: Use/Applicability of this concept has not been discussed in Commonalities under the scope of Meta Release v0.4. When required by an API project as an option to meet a UC/Requirement, please generate an issue for Commonalities discussion about it.", "additionalProperties": { "type": "string" } }, "method": { "type": "string", "description": "The HTTP method to use for sending the message.", "enum": [ "POST" ] } } }, "MQTTSubscriptionRequest-DS-ROS-V0": { "allOf": [ { "$ref": "#/components/schemas/SubscriptionRequest-DS-ROS-V0" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/MQTTSettings-DS-ROS-V0" } } } ] }, "MQTTSubscriptionResponse-DS-ROS-V0": { "allOf": [ { "$ref": "#/components/schemas/Subscription-DS-ROS-V0" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/MQTTSettings-DS-ROS-V0" } } } ] }, "MQTTSettings-DS-ROS-V0": { "type": "object", "properties": { "topicName": { "type": "string" }, "qos": { "type": "integer", "format": "int32" }, "retain": { "type": "boolean" }, "expiry": { "type": "integer", "format": "int32" }, "userProperties": { "type": "object" } }, "required": [ "topicName" ] }, "AMQPSubscriptionRequest-DS-ROS-V0": { "allOf": [ { "$ref": "#/components/schemas/SubscriptionRequest-DS-ROS-V0" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/AMQPSettings-DS-ROS-V0" } } } ] }, "AMQPSubscriptionResponse-DS-ROS-V0": { "allOf": [ { "$ref": "#/components/schemas/Subscription-DS-ROS-V0" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/AMQPSettings-DS-ROS-V0" } } } ] }, "AMQPSettings-DS-ROS-V0": { "type": "object", "properties": { "address": { "type": "string" }, "linkName": { "type": "string" }, "senderSettlementMode": { "type": "string", "enum": [ "settled", "unsettled" ] }, "linkProperties": { "type": "object", "additionalProperties": { "type": "string" } } } }, "ApacheKafkaSubscriptionRequest-DS-ROS-V0": { "allOf": [ { "$ref": "#/components/schemas/SubscriptionRequest-DS-ROS-V0" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/ApacheKafkaSettings-DS-ROS-V0" } } } ] }, "ApacheKafkaSubscriptionResponse-DS-ROS-V0": { "allOf": [ { "$ref": "#/components/schemas/Subscription-DS-ROS-V0" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/ApacheKafkaSettings-DS-ROS-V0" } } } ] }, "ApacheKafkaSettings-DS-ROS-V0": { "type": "object", "properties": { "topicName": { "type": "string" }, "partitionKeyExtractor": { "type": "string" }, "clientId": { "type": "string" }, "ackMode": { "type": "integer" } }, "required": [ "topicName" ] }, "NATSSubscriptionRequest-DS-ROS-V0": { "allOf": [ { "$ref": "#/components/schemas/SubscriptionRequest-DS-ROS-V0" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/NATSSettings-DS-ROS-V0" } } } ] }, "NATSSubscriptionResponse-DS-ROS-V0": { "allOf": [ { "$ref": "#/components/schemas/Subscription-DS-ROS-V0" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/NATSSettings-DS-ROS-V0" } } } ] }, "NATSSettings-DS-ROS-V0": { "type": "object", "properties": { "subject": { "type": "string" } }, "required": [ "subject" ] }, "LastStatusTime-DS-RE-V110": { "description": "Last time that the associated device reachability status was updated.\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\nRecommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)\n", "type": "string", "format": "date-time", "example": "2024-02-20T10:41:38.657Z" }, "ReachabilityStatusResponse-DS-RE-V110": { "type": "object", "required": [ "lastStatusTime", "reachable" ], "properties": { "device": { "$ref": "#/components/schemas/DeviceResponse-DS-RE-V110" }, "lastStatusTime": { "$ref": "#/components/schemas/LastStatusTime-DS-RE-V110" }, "reachable": { "description": "Indicates overall device reachability", "type": "boolean" }, "connectivity": { "type": "array", "items": { "$ref": "#/components/schemas/ConnectivityType-DS-RE-V110" } } } }, "ConnectivityType-DS-RE-V110": { "description": "DATA: The device is connected to the network for Data usage (regardless of the SMS reachability)\n\nSMS: The device is connected to the network only for SMS usage\n", "type": "string", "enum": [ "DATA", "SMS" ] }, "Device-DS-RE-V110": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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.\n", "type": "object", "properties": { "phoneNumber": { "$ref": "#/components/schemas/PhoneNumber-DS-RE-V110" }, "networkAccessIdentifier": { "$ref": "#/components/schemas/NetworkAccessIdentifier-DS-RE-V110" }, "ipv4Address": { "$ref": "#/components/schemas/DeviceIpv4Addr-DS-RE-V110" }, "ipv6Address": { "$ref": "#/components/schemas/DeviceIpv6Address-DS-RE-V110" } }, "minProperties": 1 }, "DeviceResponse-DS-RE-V110": { "description": "An identifier for the end-user equipment able to connect to the network that the response refers to. This parameter is only returned when the API consumer includes the `device` parameter in their request (i.e. they are using a two-legged access token), and is relevant when more than one device identifier is specified, as only one of those device identifiers is allowed in the response.\n\nIf the API consumer provides more than one device identifier in their request, the API provider must return a single identifier which is the one they are using to fulfil the request, even if the identifiers do not match the same device. API provider does not perform any logic to validate/correlate that the indicated device identifiers match the same device. No error should be returned if the identifiers are otherwise valid to prevent API consumers correlating different identifiers with a given end user.\n", "allOf": [ { "$ref": "#/components/schemas/Device-DS-RE-V110" }, { "maxProperties": 1 } ] }, "PhoneNumber-DS-RE-V110": { "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": "+99999991000" }, "NetworkAccessIdentifier-DS-RE-V110": { "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" }, "DeviceIpv4Addr-DS-RE-V110": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "$ref": "#/components/schemas/SingleIpv4Addr-DS-RE-V110" }, "privateAddress": { "$ref": "#/components/schemas/SingleIpv4Addr-DS-RE-V110" }, "publicPort": { "$ref": "#/components/schemas/Port-DS-RE-V110" } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ], "example": { "publicAddress": "84.125.93.10", "publicPort": 59765 } }, "SingleIpv4Addr-DS-RE-V110": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4", "example": "84.125.93.10" }, "Port-DS-RE-V110": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 }, "DeviceIpv6Address-DS-RE-V110": { "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).\n", "type": "string", "format": "ipv6", "example": "2001:db8:85a3:8d3:1319:8a2e:370:7344" }, "RequestReachabilityStatus-DS-RE-V110": { "description": "The request to retrieve the current roaming-status for the requested device.", "type": "object", "properties": { "device": { "$ref": "#/components/schemas/Device-DS-RE-V110" } } }, "ErrorInfo-DS-RE-V110": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, "XCorrelator-DS-RE-V110": { "type": "string", "pattern": "^[a-zA-Z0-9-_:;.\\/<>{}]{0,256}$", "example": "b4333c46-49c0-4f62-80d7-f0ef930f1c46" }, "RoamingStatusResponse-DS-RO-V110": { "type": "object", "required": [ "lastStatusTime", "roaming" ], "properties": { "device": { "$ref": "#/components/schemas/DeviceResponse-DS-RO-V110" }, "lastStatusTime": { "$ref": "#/components/schemas/LastStatusTime-DS-RO-V110" }, "roaming": { "$ref": "#/components/schemas/ActiveRoaming-DS-RO-V110" }, "countryCode": { "$ref": "#/components/schemas/CountryCode-DS-RO-V110" }, "countryName": { "$ref": "#/components/schemas/CountryName-DS-RO-V110" } } }, "LastStatusTime-DS-RO-V110": { "description": "Last time that the associated device reachability status was updated.\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\nRecommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)\n", "type": "string", "format": "date-time", "example": "2024-02-20T10:41:38.657Z" }, "ActiveRoaming-DS-RO-V110": { "description": "Roaming status. True, if it is roaming", "type": "boolean" }, "Device-DS-RO-V110": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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.\n", "type": "object", "properties": { "phoneNumber": { "$ref": "#/components/schemas/PhoneNumber-DS-RO-V110" }, "networkAccessIdentifier": { "$ref": "#/components/schemas/NetworkAccessIdentifier-DS-RO-V110" }, "ipv4Address": { "$ref": "#/components/schemas/DeviceIpv4Addr-DS-RO-V110" }, "ipv6Address": { "$ref": "#/components/schemas/DeviceIpv6Address-DS-RO-V110" } }, "minProperties": 1 }, "DeviceResponse-DS-RO-V110": { "description": "An identifier for the end-user equipment able to connect to the network that the response refers to. This parameter is only returned when the API consumer includes the `device` parameter in their request (i.e. they are using a two-legged access token), and is relevant when more than one device identifier is specified, as only one of those device identifiers is allowed in the response.\n\nIf the API consumer provides more than one device identifier in their request, the API provider must return a single identifier which is the one they are using to fulfil the request, even if the identifiers do not match the same device. API provider does not perform any logic to validate/correlate that the indicated device identifiers match the same device. No error should be returned if the identifiers are otherwise valid to prevent API consumers correlating different identifiers with a given end user.\n", "allOf": [ { "$ref": "#/components/schemas/Device-DS-RO-V110" }, { "maxProperties": 1 } ] }, "PhoneNumber-DS-RO-V110": { "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": "+99999991000" }, "NetworkAccessIdentifier-DS-RO-V110": { "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" }, "DeviceIpv4Addr-DS-RO-V110": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "$ref": "#/components/schemas/SingleIpv4Addr-DS-RO-V110" }, "privateAddress": { "$ref": "#/components/schemas/SingleIpv4Addr-DS-RO-V110" }, "publicPort": { "$ref": "#/components/schemas/Port-DS-RO-V110" } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ], "example": { "publicAddress": "84.125.93.10", "publicPort": 59765 } }, "SingleIpv4Addr-DS-RO-V110": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4", "example": "84.125.93.10" }, "Port-DS-RO-V110": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 }, "DeviceIpv6Address-DS-RO-V110": { "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).\n", "type": "string", "format": "ipv6", "example": "2001:db8:85a3:8d3:1319:8a2e:370:7344" }, "CountryCode-DS-RO-V110": { "description": "The Mobile country code (MCC) as an geographic region identifier for the country and the dependent areas.", "type": "integer" }, "CountryName-DS-RO-V110": { "description": "The ISO 3166 ALPHA-2 country-codes of mapped to mobile country code(MCC). If there is mapping of one MCC to multiple countries, then we have list of countries. If there is no mapping of MCC to any country, then an empty array [] shall be returned..", "type": "array", "items": { "type": "string" } }, "RoamingStatusRequest-DS-RO-V110": { "description": "The request for retrieving the current roaming status for the requested device.", "type": "object", "properties": { "device": { "$ref": "#/components/schemas/Device-DS-RO-V110" } } }, "ErrorInfo-DS-RO-V110": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, "XCorrelator-DS-RO-V110": { "type": "string", "pattern": "^[a-zA-Z0-9-_:;.\\/<>{}]{0,256}$", "example": "b4333c46-49c0-4f62-80d7-f0ef930f1c46" }, "ErrorInfo-DS-RES-V080": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, "SubscriptionRequest-DS-RES-V080": { "description": "The request for creating a event-type event subscription", "type": "object", "required": [ "sink", "protocol", "config", "types" ], "properties": { "protocol": { "$ref": "#/components/schemas/Protocol-DS-RES-V080" }, "sink": { "type": "string", "format": "uri", "pattern": "^https:\\/\\/.+$", "description": "The address to which events shall be delivered using the selected protocol.", "example": "https://endpoint.example.com/sink" }, "sinkCredential": { "$ref": "#/components/schemas/SinkCredential-DS-RES-V080" }, "types": { "description": "Camara Event types eligible to be delivered by this subscription.\nNote: For the current Commonalities API design guidelines, only one event type per subscription is allowed, yet in the following releases use of array of event types SHALL be specified without changing this definition.\n", "type": "array", "minItems": 1, "maxItems": 1, "items": { "$ref": "#/components/schemas/SubscriptionEventType-DS-RES-V080" } }, "config": { "$ref": "#/components/schemas/Config-DS-RES-V080" } }, "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" } } }, "Protocol-DS-RES-V080": { "type": "string", "enum": [ "HTTP", "MQTT3", "MQTT5", "AMQP", "NATS", "KAFKA" ], "description": "Identifier of a delivery protocol. Only HTTP is allowed for now", "example": "HTTP" }, "Config-DS-RES-V080": { "description": "Implementation-specific configuration parameters needed by the subscription manager for acquiring events.\nIn CAMARA we have predefined attributes like `subscriptionExpireTime`, `subscriptionMaxEvents`, `initialEvent`\nSpecific event type attributes must be defined in `subscriptionDetail`\nNote: if a request is performed for several event type, all subscribed event will use same `config` parameters.\n", "type": "object", "required": [ "subscriptionDetail" ], "properties": { "subscriptionDetail": { "$ref": "#/components/schemas/CreateSubscriptionDetail-DS-RES-V080" }, "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.\nExample: Consumer subscribes to reachability SMS. If consumer sets initialEvent to true and device is already reachable by SMS, an event is triggered.\n" } } }, "SinkCredential-DS-RES-V080": { "description": "A sink credential provides authentication or authorization information necessary to enable delivery of events to a target.", "type": "object", "properties": { "credentialType": { "type": "string", "enum": [ "PLAIN", "ACCESSTOKEN", "REFRESHTOKEN" ], "description": "The type of the credential.\nNote: Type of the credential - MUST be set to ACCESSTOKEN for now\n" } }, "discriminator": { "propertyName": "credentialType", "mapping": { "PLAIN": "#/components/schemas/PlainCredential", "ACCESSTOKEN": "#/components/schemas/AccessTokenCredential", "REFRESHTOKEN": "#/components/schemas/RefreshTokenCredential" } }, "required": [ "credentialType" ] }, "PlainCredential-DS-RES-V080": { "type": "object", "description": "A plain credential as a combination of an identifier and a secret.", "allOf": [ { "$ref": "#/components/schemas/SinkCredential-DS-RES-V080" }, { "type": "object", "required": [ "identifier", "secret" ], "properties": { "identifier": { "description": "The identifier might be an account or username.", "type": "string" }, "secret": { "description": "The secret might be a password or passphrase.", "type": "string" } } } ] }, "AccessTokenCredential-DS-RES-V080": { "type": "object", "description": "An access token credential.", "allOf": [ { "$ref": "#/components/schemas/SinkCredential-DS-RES-V080" }, { "type": "object", "properties": { "accessToken": { "description": "REQUIRED. An access token is a previously acquired token granting access to the target resource.", "type": "string" }, "accessTokenExpiresUtc": { "type": "string", "format": "date-time", "description": "REQUIRED. An absolute (UTC) timestamp at which the token shall be considered expired.\nIn the case of an ACCESS_TOKEN_EXPIRED termination reason, implementation should notify the client before the expiration date.\nIf the access token is a JWT and registered \"exp\" (Expiration Time) claim is present, the two expiry times should match.\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\nRecommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)\n", "example": "2023-07-03T12:27:08.312Z" }, "accessTokenType": { "description": "REQUIRED. Type of the access token (See [OAuth 2.0](https://tools.ietf.org/html/rfc6749#section-7.1)).", "type": "string", "enum": [ "bearer" ] } }, "required": [ "accessToken", "accessTokenExpiresUtc", "accessTokenType" ] } ] }, "RefreshTokenCredential-DS-RES-V080": { "type": "object", "description": "An access token credential with a refresh token.", "allOf": [ { "$ref": "#/components/schemas/SinkCredential-DS-RES-V080" }, { "type": "object", "properties": { "accessToken": { "description": "REQUIRED. An access token is a previously acquired token granting access to the target resource.", "type": "string" }, "accessTokenExpiresUtc": { "type": "string", "format": "date-time", "description": "REQUIRED. An absolute (UTC) timestamp at which the token shall be considered expired.\nIn the case of an ACCESS_TOKEN_EXPIRED termination reason, implementation should notify the client before the expiration date.\nIf the access token is a JWT and registered \"exp\" (Expiration Time) claim is present, the two expiry times should match.\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\nRecommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)\n", "example": "2023-07-03T12:27:08.312Z" }, "accessTokenType": { "description": "REQUIRED. Type of the access token (See [OAuth 2.0](https://tools.ietf.org/html/rfc6749#section-7.1)).", "type": "string", "enum": [ "bearer" ] }, "refreshToken": { "description": "REQUIRED. An refresh token credential used to acquire access tokens.", "type": "string" }, "refreshTokenEndpoint": { "type": "string", "format": "uri", "description": "REQUIRED. A URL at which the refresh token can be traded for an access token." } } } ], "required": [ "accessToken", "accessTokenExpiresUtc", "accessTokenType", "refreshToken", "refreshTokenEndpoint" ] }, "CreateSubscriptionDetail-DS-RES-V080": { "description": "The detail of the requested event subscription.", "type": "object", "properties": { "device": { "$ref": "#/components/schemas/Device-DS-RES-V080" } } }, "EventTypeNotification-DS-RES-V080": { "type": "string", "description": "reachability-data - Event triggered when the device is connected to the network for Data usage (regardless of the SMS reachability).\n\nreachability-sms - Event triggered when the device is connected to the network only for SMS usage.\n\nreachability-disconnected - Event triggered when the device is not connected.\n\nsubscription-started - Event triggered when the subscription starts.\n\nsubscription-updated - Event triggered when the subscription is updated.\n\nsubscription-ended - Event triggered when the subscription ends.\n", "enum": [ "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-data", "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-sms", "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-disconnected", "org.camaraproject.device-reachability-status-subscriptions.v0.subscription-started", "org.camaraproject.device-reachability-status-subscriptions.v0.subscription-updated", "org.camaraproject.device-reachability-status-subscriptions.v0.subscription-ended" ] }, "SubscriptionEventType-DS-RES-V080": { "type": "string", "description": "reachability-data - Event triggered when the device is connected to the network for Data usage (regardless of the SMS reachability).\n\nreachability-sms - Event triggered when the device is connected to the network only for SMS usage\n\nreachability-disconnected - Event triggered when the device is not connected.\n", "enum": [ "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-data", "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-sms", "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-disconnected" ] }, "Subscription-DS-RES-V080": { "description": "Represents a event-type subscription.", "type": "object", "required": [ "sink", "protocol", "config", "types", "id" ], "properties": { "protocol": { "$ref": "#/components/schemas/Protocol-DS-RES-V080" }, "sink": { "type": "string", "format": "uri", "pattern": "^https:\\/\\/.+$", "description": "The address to which events shall be delivered using the selected protocol.", "example": "https://endpoint.example.com/sink" }, "types": { "description": "Camara Event types eligible to be delivered by this subscription.\nNote: For the current Commonalities API design guidelines, only one event type per subscription is allowed\n", "type": "array", "minItems": 1, "maxItems": 1, "items": { "$ref": "#/components/schemas/SubscriptionEventType-DS-RES-V080" } }, "config": { "$ref": "#/components/schemas/Config-DS-RES-V080" }, "id": { "$ref": "#/components/schemas/SubscriptionId-DS-RES-V080" }, "startsAt": { "type": "string", "format": "date-time", "description": "Date when the event subscription will begin/began\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\nRecommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)\n", "example": "2023-07-03T12:27:08.312Z" }, "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.\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\nRecommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)\n", "example": "2023-07-03T12:27:08.312Z" }, "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\n\n\n\n\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" } }, "example": { "id": "550e8400-e29b-41d4-a716-446655440000", "sink": "https://endpoint.example.com/sink", "protocol": "HTTP", "types": [ "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-data" ], "config": { "subscriptionDetail": { "device": { "phoneNumber": "+99999991000" } }, "subscriptionExpireTime": "2024-07-17T13:18:23.682Z", "subscriptionMaxEvents": 5, "initialEvent": true }, "startsAt": "2024-07-03T21:12:02.871Z", "expiresAt": "2024-07-03T21:12:02.871Z", "status": "ACTIVE" } }, "Device-DS-RES-V080": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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.\n", "type": "object", "properties": { "phoneNumber": { "$ref": "#/components/schemas/PhoneNumber-DS-RES-V080" }, "networkAccessIdentifier": { "$ref": "#/components/schemas/NetworkAccessIdentifier-DS-RES-V080" }, "ipv4Address": { "$ref": "#/components/schemas/DeviceIpv4Addr-DS-RES-V080" }, "ipv6Address": { "$ref": "#/components/schemas/DeviceIpv6Address-DS-RES-V080" } }, "minProperties": 1 }, "DeviceResponse-DS-RES-V080": { "description": "An identifier for the end-user equipment able to connect to the network that the response refers to. This parameter is only returned when the API consumer includes the `device` parameter in their request (i.e. they are using a two-legged access token), and is relevant when more than one device identifier is specified, as only one of those device identifiers is allowed in the response.\n\nIf the API consumer provides more than one device identifier in their request, the API provider must return a single identifier which is the one they are using to fulfil the request, even if the identifiers do not match the same device. API provider does not perform any logic to validate/correlate that the indicated device identifiers match the same device. No error should be returned if the identifiers are otherwise valid to prevent API consumers correlating different identifiers with a given end user.\n", "allOf": [ { "$ref": "#/components/schemas/Device-DS-RES-V080" }, { "maxProperties": 1 } ] }, "PhoneNumber-DS-RES-V080": { "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": "+99999991000" }, "NetworkAccessIdentifier-DS-RES-V080": { "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" }, "DeviceIpv4Addr-DS-RES-V080": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "$ref": "#/components/schemas/SingleIpv4Addr-DS-RES-V080" }, "privateAddress": { "$ref": "#/components/schemas/SingleIpv4Addr-DS-RES-V080" }, "publicPort": { "$ref": "#/components/schemas/Port-DS-RES-V080" } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ], "example": { "publicAddress": "84.125.93.10", "publicPort": 59765 } }, "SingleIpv4Addr-DS-RES-V080": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4", "example": "84.125.93.10" }, "Port-DS-RES-V080": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 }, "DeviceIpv6Address-DS-RES-V080": { "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).\n", "type": "string", "format": "ipv6", "example": "2001:db8:85a3:8d3:1319:8a2e:370:7344" }, "SubscriptionAsync-DS-RES-V080": { "description": "Response for a device reachability status operation managed asynchronously (Creation or Deletion)", "type": "object", "required": [ "id" ], "properties": { "id": { "$ref": "#/components/schemas/SubscriptionId-DS-RES-V080" } } }, "SubscriptionId-DS-RES-V080": { "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.", "example": "qs15-h556-rt89-1298" }, "CloudEvent-DS-RES-V080": { "description": "The notification callback", "required": [ "id", "source", "specversion", "type", "time" ], "properties": { "id": { "type": "string", "description": "identifier of this event, that must be unique in the source context." }, "source": { "$ref": "#/components/schemas/Source-DS-RES-V080" }, "type": { "$ref": "#/components/schemas/EventTypeNotification-DS-RES-V080" }, "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-DS-RES-V080" } }, "discriminator": { "propertyName": "type", "mapping": { "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-data": "#/components/schemas/EventReachabilityData", "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-sms": "#/components/schemas/EventReachabilitySms", "org.camaraproject.device-reachability-status-subscriptions.v0.reachability-disconnected": "#/components/schemas/EventReachabilityDisconnected", "org.camaraproject.device-reachability-status-subscriptions.v0.subscription-started": "#/components/schemas/EventSubscriptionStarted", "org.camaraproject.device-reachability-status-subscriptions.v0.subscription-updated": "#/components/schemas/EventSubscriptionUpdated", "org.camaraproject.device-reachability-status-subscriptions.v0.subscription-ended": "#/components/schemas/EventSubscriptionEnded" } } }, "Source-DS-RES-V080": { "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\n\n\n\n\n * https://github.com/cloudevents\n * mailto:cncf-wg-serverless@lists.cncf.io\n- Universally-unique URN with a UUID:\n\n\n\n\n\n * urn:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66\n- Application-specific identifier:\n\n\n\n\n\n * /cloudevents/spec/pull/123\n * 1-555-123-4567\n", "example": "https://notificationSendServer12.supertelco.com" }, "DateTime-DS-RES-V080": { "type": "string", "format": "date-time", "description": "Timestamp of when the occurrence happened.\nIf the time of the occurrence cannot be determined then this attribute MAY be set to some other time (such as the current time) by the CloudEvents producer,\nhowever all producers for the same source MUST be consistent in this respect. In other words,\neither they all use the actual time of the occurrence or they all use the same algorithm to determine the value used.\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\nRecommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)\n", "example": "2018-04-05T17:31:00Z" }, "EventReachabilityData-DS-RES-V080": { "description": "event structure for reachability data usage", "allOf": [ { "$ref": "#/components/schemas/CloudEvent-DS-RES-V080" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/ReachabilityDataSmsDisconnected-DS-RES-V080" } } } ] }, "EventReachabilitySms-DS-RES-V080": { "description": "event structure for reachability SMS usage", "allOf": [ { "$ref": "#/components/schemas/CloudEvent-DS-RES-V080" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/ReachabilityDataSmsDisconnected-DS-RES-V080" } } } ] }, "EventReachabilityDisconnected-DS-RES-V080": { "description": "event structure for disconnection", "allOf": [ { "$ref": "#/components/schemas/CloudEvent-DS-RES-V080" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/ReachabilityDataSmsDisconnected-DS-RES-V080" } } } ] }, "ReachabilityDataSmsDisconnected-DS-RES-V080": { "required": [ "subscriptionId" ], "properties": { "device": { "$ref": "#/components/schemas/DeviceResponse-DS-RES-V080" }, "subscriptionId": { "$ref": "#/components/schemas/SubscriptionId-DS-RES-V080" } } }, "EventSubscriptionEnded-DS-RES-V080": { "description": "Event structure for sending subscription-ended event", "allOf": [ { "$ref": "#/components/schemas/CloudEvent-DS-RES-V080" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/SubscriptionEnded-DS-RES-V080" } } } ] }, "EventSubscriptionStarted-DS-RES-V080": { "description": "Event structure for event subscription started", "allOf": [ { "$ref": "#/components/schemas/CloudEvent-DS-RES-V080" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/SubscriptionStarted-DS-RES-V080" } } } ] }, "SubscriptionStarted-DS-RES-V080": { "description": "Event detail structure for subscription started event", "type": "object", "required": [ "initiationReason", "subscriptionId" ], "properties": { "device": { "$ref": "#/components/schemas/Device-DS-RES-V080" }, "initiationReason": { "$ref": "#/components/schemas/InitiationReason-DS-RES-V080" }, "subscriptionId": { "$ref": "#/components/schemas/SubscriptionId-DS-RES-V080" }, "initiationDescription": { "description": "Description about the start of the subscription.", "type": "string" } } }, "InitiationReason-DS-RES-V080": { "type": "string", "description": "- SUBSCRIPTION_CREATED - Subscription created by API Server\n", "enum": [ "SUBSCRIPTION_CREATED" ] }, "EventSubscriptionUpdated-DS-RES-V080": { "description": "Event structure for event subscription updated", "allOf": [ { "$ref": "#/components/schemas/CloudEvent-DS-RES-V080" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/SubscriptionUpdated-DS-RES-V080" } } } ] }, "SubscriptionUpdated-DS-RES-V080": { "description": "Event detail structure for subscription updated event", "type": "object", "required": [ "updateReason", "subscriptionId" ], "properties": { "device": { "$ref": "#/components/schemas/Device-DS-RES-V080" }, "updateReason": { "$ref": "#/components/schemas/UpdateReason-DS-RES-V080" }, "subscriptionId": { "$ref": "#/components/schemas/SubscriptionId-DS-RES-V080" }, "updateDescription": { "description": "Description about the subscription update.", "type": "string" } } }, "UpdateReason-DS-RES-V080": { "type": "string", "description": "- SUBSCRIPTION_ACTIVE - API server transitioned susbcription status to `ACTIVE`\n- SUBSCRIPTION_INACTIVE - API server transitioned susbcription status to `INACTIVE`\n", "enum": [ "SUBSCRIPTION_ACTIVE", "SUBSCRIPTION_INACTIVE" ] }, "SubscriptionEnded-DS-RES-V080": { "description": "Event detail structure for org.camaraproject.device-reachability-status-subscriptions.v0.subscription-ended event", "type": "object", "required": [ "terminationReason", "subscriptionId" ], "properties": { "device": { "$ref": "#/components/schemas/DeviceResponse-DS-RES-V080" }, "terminationReason": { "$ref": "#/components/schemas/TerminationReason-DS-RES-V080" }, "subscriptionId": { "$ref": "#/components/schemas/SubscriptionId-DS-RES-V080" }, "terminationDescription": { "type": "string" } } }, "TerminationReason-DS-RES-V080": { "type": "string", "description": "- NETWORK_TERMINATED - API server stopped sending notification\n- SUBSCRIPTION_EXPIRED - Subscription expire time (optionally set by the requester) has been reached\n- MAX_EVENTS_REACHED - Maximum number of events (optionally set by the requester) has been reached\n- ACCESS_TOKEN_EXPIRED - Access Token sinkCredential (optionally set by the requester) expiration time has been reached\n- SUBSCRIPTION_DELETED - Subscription was deleted by the requester\n", "enum": [ "MAX_EVENTS_REACHED", "NETWORK_TERMINATED", "SUBSCRIPTION_EXPIRED", "ACCESS_TOKEN_EXPIRED", "SUBSCRIPTION_DELETED" ] }, "HTTPSubscriptionRequest-DS-RES-V080": { "allOf": [ { "$ref": "#/components/schemas/SubscriptionRequest-DS-RES-V080" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/HTTPSettings-DS-RES-V080" } } } ] }, "HTTPSubscriptionResponse-DS-RES-V080": { "allOf": [ { "$ref": "#/components/schemas/Subscription-DS-RES-V080" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/HTTPSettings-DS-RES-V080" } } } ] }, "HTTPSettings-DS-RES-V080": { "type": "object", "properties": { "headers": { "type": "object", "description": "A set of key/value pairs that is copied into the HTTP request as custom headers.\n\nNOTE: Use/Applicability of this concept has not been discussed in Commonalities under the scope of Meta Release v0.4. When required by an API project as an option to meet a UC/Requirement, please generate an issue for Commonalities discussion about it.", "additionalProperties": { "type": "string" } }, "method": { "type": "string", "description": "The HTTP method to use for sending the message.", "enum": [ "POST" ] } } }, "MQTTSubscriptionRequest-DS-RES-V080": { "allOf": [ { "$ref": "#/components/schemas/SubscriptionRequest-DS-RES-V080" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/MQTTSettings-DS-RES-V080" } } } ] }, "MQTTSubscriptionResponse-DS-RES-V080": { "allOf": [ { "$ref": "#/components/schemas/Subscription-DS-RES-V080" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/MQTTSettings-DS-RES-V080" } } } ] }, "MQTTSettings-DS-RES-V080": { "type": "object", "properties": { "topicName": { "type": "string" }, "qos": { "type": "integer", "format": "int32" }, "retain": { "type": "boolean" }, "expiry": { "type": "integer", "format": "int32" }, "userProperties": { "type": "object" } }, "required": [ "topicName" ] }, "AMQPSubscriptionRequest-DS-RES-V080": { "allOf": [ { "$ref": "#/components/schemas/SubscriptionRequest-DS-RES-V080" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/AMQPSettings-DS-RES-V080" } } } ] }, "AMQPSubscriptionResponse-DS-RES-V080": { "allOf": [ { "$ref": "#/components/schemas/Subscription-DS-RES-V080" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/AMQPSettings-DS-RES-V080" } } } ] }, "AMQPSettings-DS-RES-V080": { "type": "object", "properties": { "address": { "type": "string" }, "linkName": { "type": "string" }, "senderSettlementMode": { "type": "string", "enum": [ "settled", "unsettled" ] }, "linkProperties": { "type": "object", "additionalProperties": { "type": "string" } } } }, "ApacheKafkaSubscriptionRequest-DS-RES-V080": { "allOf": [ { "$ref": "#/components/schemas/SubscriptionRequest-DS-RES-V080" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/ApacheKafkaSettings-DS-RES-V080" } } } ] }, "ApacheKafkaSubscriptionResponse-DS-RES-V080": { "allOf": [ { "$ref": "#/components/schemas/Subscription-DS-RES-V080" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/ApacheKafkaSettings-DS-RES-V080" } } } ] }, "ApacheKafkaSettings-DS-RES-V080": { "type": "object", "properties": { "topicName": { "type": "string" }, "partitionKeyExtractor": { "type": "string" }, "clientId": { "type": "string" }, "ackMode": { "type": "integer" } }, "required": [ "topicName" ] }, "NATSSubscriptionRequest-DS-RES-V080": { "allOf": [ { "$ref": "#/components/schemas/SubscriptionRequest-DS-RES-V080" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/NATSSettings-DS-RES-V080" } } } ] }, "NATSSubscriptionResponse-DS-RES-V080": { "allOf": [ { "$ref": "#/components/schemas/Subscription-DS-RES-V080" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/NATSSettings-DS-RES-V080" } } } ] }, "NATSSettings-DS-RES-V080": { "type": "object", "properties": { "subject": { "type": "string" } }, "required": [ "subject" ] }, "XCorrelator-DS-RES-V080": { "type": "string", "pattern": "^[a-zA-Z0-9-_:;.\\/<>{}]{0,256}$", "example": "b4333c46-49c0-4f62-80d7-f0ef930f1c46" }, "ErrorInfo-DS-ROS-V080": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, "SubscriptionRequest-DS-ROS-V080": { "description": "The request for creating a event-type event subscription", "type": "object", "required": [ "sink", "protocol", "config", "types" ], "properties": { "protocol": { "$ref": "#/components/schemas/Protocol-DS-ROS-V080" }, "sink": { "type": "string", "format": "uri", "pattern": "^https:\\/\\/.+$", "description": "The address to which events shall be delivered using the selected protocol.", "example": "https://endpoint.example.com/sink" }, "sinkCredential": { "$ref": "#/components/schemas/SinkCredential-DS-ROS-V080" }, "types": { "description": "Camara Event types eligible to be delivered by this subscription.\nNote: for the current Commonalities version (v0.5) only one event type per subscription is allowed, yet in the following releases use of array of event types SHALL be specified without changing this definition.\n", "type": "array", "minItems": 1, "maxItems": 1, "items": { "$ref": "#/components/schemas/SubscriptionEventType-DS-ROS-V080" } }, "config": { "$ref": "#/components/schemas/Config-DS-ROS-V080" } }, "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" } } }, "Protocol-DS-ROS-V080": { "type": "string", "enum": [ "HTTP", "MQTT3", "MQTT5", "AMQP", "NATS", "KAFKA" ], "description": "Identifier of a delivery protocol. Only HTTP is allowed for now", "example": "HTTP" }, "Config-DS-ROS-V080": { "description": "Implementation-specific configuration parameters needed by the subscription manager for acquiring events.\nIn CAMARA we have predefined attributes like `subscriptionExpireTime`, `subscriptionMaxEvents`, `initialEvent`\nSpecific event type attributes must be defined in `subscriptionDetail`\nNote: if a request is performed for several event type, all subscribed event will use same `config` parameters.\n", "type": "object", "required": [ "subscriptionDetail" ], "properties": { "subscriptionDetail": { "$ref": "#/components/schemas/CreateSubscriptionDetail-DS-ROS-V080" }, "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. It must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone." }, "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.\nExample: Consumer request Roaming event. If consumer sets initialEvent to true and device is in roaming situation, an event is triggered.\n" } } }, "SinkCredential-DS-ROS-V080": { "description": "A sink credential provides authentication or authorization information necessary to enable delivery of events to a target.", "type": "object", "properties": { "credentialType": { "type": "string", "enum": [ "PLAIN", "ACCESSTOKEN", "REFRESHTOKEN" ], "description": "The type of the credential.\nNote: Type of the credential - MUST be set to ACCESSTOKEN for now\n" } }, "discriminator": { "propertyName": "credentialType", "mapping": { "PLAIN": "#/components/schemas/PlainCredential", "ACCESSTOKEN": "#/components/schemas/AccessTokenCredential", "REFRESHTOKEN": "#/components/schemas/RefreshTokenCredential" } }, "required": [ "credentialType" ] }, "PlainCredential-DS-ROS-V080": { "type": "object", "description": "A plain credential as a combination of an identifier and a secret.", "allOf": [ { "$ref": "#/components/schemas/SinkCredential-DS-ROS-V080" }, { "type": "object", "required": [ "identifier", "secret" ], "properties": { "identifier": { "description": "The identifier might be an account or username.", "type": "string" }, "secret": { "description": "The secret might be a password or passphrase.", "type": "string" } } } ] }, "AccessTokenCredential-DS-ROS-V080": { "type": "object", "description": "An access token credential.", "allOf": [ { "$ref": "#/components/schemas/SinkCredential-DS-ROS-V080" }, { "type": "object", "properties": { "accessToken": { "description": "REQUIRED. An access token is a previously acquired token granting access to the target resource.", "type": "string" }, "accessTokenExpiresUtc": { "type": "string", "format": "date-time", "description": "REQUIRED. An absolute (UTC) timestamp at which the token shall be considered expired.\nIn the case of an ACCESS_TOKEN_EXPIRED termination reason, implementation should notify the client before the expiration date.\nIf the access token is a JWT and registered \"exp\" (Expiration Time) claim is present, the two expiry times should match.\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\n", "example": "2023-07-03T12:27:08.312Z" }, "accessTokenType": { "description": "REQUIRED. Type of the access token (See [OAuth 2.0](https://tools.ietf.org/html/rfc6749#section-7.1)).", "type": "string", "enum": [ "bearer" ] } }, "required": [ "accessToken", "accessTokenExpiresUtc", "accessTokenType" ] } ] }, "RefreshTokenCredential-DS-ROS-V080": { "type": "object", "description": "An access token credential with a refresh token.", "allOf": [ { "$ref": "#/components/schemas/SinkCredential-DS-ROS-V080" }, { "type": "object", "properties": { "accessToken": { "description": "REQUIRED. An access token is a previously acquired token granting access to the target resource.", "type": "string" }, "accessTokenExpiresUtc": { "type": "string", "format": "date-time", "description": "REQUIRED. An absolute (UTC) timestamp at which the token shall be considered expired.\nIn the case of an ACCESS_TOKEN_EXPIRED termination reason, implementation should notify the client before the expiration date.\nIf the access token is a JWT and registered \"exp\" (Expiration Time) claim is present, the two expiry times should match.\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\n", "example": "2023-07-03T12:27:08.312Z" }, "accessTokenType": { "description": "REQUIRED. Type of the access token (See [OAuth 2.0](https://tools.ietf.org/html/rfc6749#section-7.1)).", "type": "string", "enum": [ "bearer" ] }, "refreshToken": { "description": "REQUIRED. An refresh token credential used to acquire access tokens.", "type": "string" }, "refreshTokenEndpoint": { "type": "string", "format": "uri", "description": "REQUIRED. A URL at which the refresh token can be traded for an access token." } } } ], "required": [ "accessToken", "accessTokenExpiresUtc", "accessTokenType", "refreshToken", "refreshTokenEndpoint" ] }, "CreateSubscriptionDetail-DS-ROS-V080": { "description": "The detail of the requested event subscription.", "type": "object", "properties": { "device": { "$ref": "#/components/schemas/Device-DS-ROS-V080" } } }, "EventTypeNotification-DS-ROS-V080": { "type": "string", "description": "roaming-status - Event triggered when the device switch from roaming ON to roaming OFF and conversely\n\nroaming-on - Event triggered when the device switch from roaming OFF to roaming ON\n\nroaming-off - Event triggered when the device switch from roaming ON to roaming OFF\n\nroaming-change-country - Event triggered when the device in roaming change country code\n\nsubscription-started - Event triggered when the subscription starts.\n\nsubscription-updated - Event triggered when the subscription is updated.\n\nsubscription-ended - Event triggered when the subscription ends\n", "enum": [ "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-status", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-on", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-off", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-change-country", "org.camaraproject.device-roaming-status-subscriptions.v0.subscription-started", "org.camaraproject.device-roaming-status-subscriptions.v0.subscription-updated", "org.camaraproject.device-roaming-status-subscriptions.v0.subscription-ended" ] }, "SubscriptionEventType-DS-ROS-V080": { "type": "string", "description": "roaming-status - Event triggered when the device switch from roaming ON to roaming OFF and conversely\n\nroaming-on - Event triggered when the device switch from roaming OFF to roaming ON\n\nroaming-off - Event triggered when the device switch from roaming ON to roaming OFF\n\nroaming-change-country - Event triggered when the device in roaming change country code\n", "enum": [ "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-status", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-on", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-off", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-change-country" ] }, "Subscription-DS-ROS-V080": { "description": "Represents a event-type subscription.", "type": "object", "required": [ "sink", "protocol", "config", "types", "id" ], "properties": { "protocol": { "$ref": "#/components/schemas/Protocol-DS-ROS-V080" }, "sink": { "type": "string", "format": "uri", "pattern": "^https:\\/\\/.+$", "description": "The address to which events shall be delivered using the selected protocol.", "example": "https://endpoint.example.com/sink" }, "types": { "description": "Camara Event types eligible to be delivered by this subscription.\nNote: for the Commonalities meta-release v0.4 we enforce to have only event type per subscription then for following meta-release use of array MUST be decided\n\n\n\n\n\n at API project level.\n", "type": "array", "minItems": 1, "maxItems": 1, "items": { "$ref": "#/components/schemas/SubscriptionEventType-DS-ROS-V080" } }, "config": { "$ref": "#/components/schemas/Config-DS-ROS-V080" }, "id": { "$ref": "#/components/schemas/SubscriptionId-DS-ROS-V080" }, "startsAt": { "type": "string", "format": "date-time", "description": "Date when the event subscription will begin/began\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\n", "example": "2023-07-03T12:27:08.312Z" }, "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.\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\n", "example": "2023-07-03T12:27:08.312Z" }, "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\n\n\n\n\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" } }, "example": { "id": "550e8400-e29b-41d4-a716-446655440000", "sink": "https://endpoint.example.com/sink", "protocol": "HTTP", "types": [ "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-status" ], "config": { "subscriptionDetail": { "device": { "phoneNumber": "+99999991000" } }, "subscriptionExpireTime": "2024-07-17T13:18:23.682Z", "subscriptionMaxEvents": 5, "initialEvent": true }, "startsAt": "2024-07-03T21:12:02.871Z", "expiresAt": "2024-07-03T21:12:02.871Z", "status": "ACTIVE" } }, "Device-DS-ROS-V080": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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.\n", "type": "object", "properties": { "phoneNumber": { "$ref": "#/components/schemas/PhoneNumber-DS-ROS-V080" }, "networkAccessIdentifier": { "$ref": "#/components/schemas/NetworkAccessIdentifier-DS-ROS-V080" }, "ipv4Address": { "$ref": "#/components/schemas/DeviceIpv4Addr-DS-ROS-V080" }, "ipv6Address": { "$ref": "#/components/schemas/DeviceIpv6Address-DS-ROS-V080" } }, "minProperties": 1 }, "DeviceResponse-DS-ROS-V080": { "description": "An identifier for the end-user equipment able to connect to the network that the response refers to. This parameter is only returned when the API consumer includes the `device` parameter in their request (i.e. they are using a two-legged access token), and is relevant when more than one device identifier is specified, as only one of those device identifiers is allowed in the response.\n\nIf the API consumer provides more than one device identifier in their request, the API provider must return a single identifier which is the one they are using to fulfil the request, even if the identifiers do not match the same device. API provider does not perform any logic to validate/correlate that the indicated device identifiers match the same device. No error should be returned if the identifiers are otherwise valid to prevent API consumers correlating different identifiers with a given end user.\n", "allOf": [ { "$ref": "#/components/schemas/Device-DS-ROS-V080" }, { "maxProperties": 1 } ] }, "PhoneNumber-DS-ROS-V080": { "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": "+99999991000" }, "NetworkAccessIdentifier-DS-ROS-V080": { "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" }, "DeviceIpv4Addr-DS-ROS-V080": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "$ref": "#/components/schemas/SingleIpv4Addr-DS-ROS-V080" }, "privateAddress": { "$ref": "#/components/schemas/SingleIpv4Addr-DS-ROS-V080" }, "publicPort": { "$ref": "#/components/schemas/Port-DS-ROS-V080" } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ], "example": { "publicAddress": "84.125.93.10", "publicPort": 59765 } }, "SingleIpv4Addr-DS-ROS-V080": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4", "example": "84.125.93.10" }, "Port-DS-ROS-V080": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 }, "DeviceIpv6Address-DS-ROS-V080": { "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).\n", "type": "string", "format": "ipv6", "example": "2001:db8:85a3:8d3:1319:8a2e:370:7344" }, "CountryCode-DS-ROS-V080": { "description": "The Mobile country code (MCC) as an geographic region identifier for the country and the dependent areas.", "type": "integer" }, "CountryName-DS-ROS-V080": { "description": "The ISO 3166 ALPHA-2 country-codes of mapped to mobile country code(MCC). If there is mapping of one MCC to multiple countries, then we have list of countries. If there is no mapping of MCC to any country, then an empty array [] shall be returned..", "type": "array", "items": { "type": "string" } }, "SubscriptionAsync-DS-ROS-V080": { "description": "Response for a device reachability status operation managed asynchronously (Creation or Deletion)", "type": "object", "required": [ "id" ], "properties": { "id": { "$ref": "#/components/schemas/SubscriptionId-DS-ROS-V080" } } }, "SubscriptionId-DS-ROS-V080": { "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.", "example": "qs15-h556-rt89-1298" }, "CloudEvent-DS-ROS-V080": { "description": "The notification callback", "required": [ "id", "source", "specversion", "type", "time" ], "properties": { "id": { "type": "string", "description": "identifier of this event, that must be unique in the source context." }, "source": { "$ref": "#/components/schemas/Source-DS-ROS-V080" }, "type": { "$ref": "#/components/schemas/EventTypeNotification-DS-ROS-V080" }, "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-DS-ROS-V080" } }, "discriminator": { "propertyName": "type", "mapping": { "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-status": "#/components/schemas/EventRoamingStatus", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-change-country": "#/components/schemas/EventRoamingChangeCountry", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-off": "#/components/schemas/EventRoamingOff", "org.camaraproject.device-roaming-status-subscriptions.v0.roaming-on": "#/components/schemas/EventRoamingOn", "org.camaraproject.device-roaming-status-subscriptions.v0.subscription-started": "#/components/schemas/EventSubscriptionStarted", "org.camaraproject.device-roaming-status-subscriptions.v0.subscription-updated": "#/components/schemas/EventSubscriptionUpdated", "org.camaraproject.device-roaming-status-subscriptions.v0.subscription-ended": "#/components/schemas/EventSubscriptionEnded" } } }, "Source-DS-ROS-V080": { "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\n\n\n\n\n * https://github.com/cloudevents\n * mailto:cncf-wg-serverless@lists.cncf.io\n- Universally-unique URN with a UUID:\n\n\n\n\n\n * urn:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66\n- Application-specific identifier:\n\n\n\n\n\n * /cloudevents/spec/pull/123\n * 1-555-123-4567\n", "example": "https://notificationSendServer12.supertelco.com" }, "DateTime-DS-ROS-V080": { "type": "string", "format": "date-time", "description": "Timestamp of when the occurrence happened. It must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.", "example": "2018-04-05T17:31:00Z" }, "EventRoamingStatus-DS-ROS-V080": { "description": "event structure for roaming status change", "allOf": [ { "$ref": "#/components/schemas/CloudEvent-DS-ROS-V080" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/RoamingStatus-DS-ROS-V080" } } } ] }, "EventRoamingOn-DS-ROS-V080": { "description": "event structure for roaming on change", "allOf": [ { "$ref": "#/components/schemas/CloudEvent-DS-ROS-V080" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/BasicDeviceEventData-DS-ROS-V080" } } } ] }, "EventRoamingOff-DS-ROS-V080": { "description": "event structure for roaming off change", "allOf": [ { "$ref": "#/components/schemas/CloudEvent-DS-ROS-V080" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/BasicDeviceEventData-DS-ROS-V080" } } } ] }, "EventRoamingChangeCountry-DS-ROS-V080": { "description": "event structure for roaming change country", "allOf": [ { "$ref": "#/components/schemas/CloudEvent-DS-ROS-V080" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/RoamingChangeCountry-DS-ROS-V080" } } } ] }, "EventSubscriptionEnded-DS-ROS-V080": { "description": "Event structure for sending subscription-ended event", "allOf": [ { "$ref": "#/components/schemas/CloudEvent-DS-ROS-V080" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/SubscriptionEnded-DS-ROS-V080" } } } ] }, "EventSubscriptionStarted-DS-ROS-V080": { "description": "Event structure for event subscription started", "allOf": [ { "$ref": "#/components/schemas/CloudEvent-DS-ROS-V080" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/SubscriptionStarted-DS-ROS-V080" } } } ] }, "SubscriptionStarted-DS-ROS-V080": { "description": "Event detail structure for subscription started event", "type": "object", "required": [ "initiationReason", "subscriptionId" ], "properties": { "device": { "$ref": "#/components/schemas/Device-DS-ROS-V080" }, "initiationReason": { "$ref": "#/components/schemas/InitiationReason-DS-ROS-V080" }, "subscriptionId": { "$ref": "#/components/schemas/SubscriptionId-DS-ROS-V080" }, "initiationDescription": { "description": "Description about the start of the subscription.", "type": "string" } } }, "InitiationReason-DS-ROS-V080": { "type": "string", "description": "- SUBSCRIPTION_CREATED - Subscription created by API Server\n", "enum": [ "SUBSCRIPTION_CREATED" ] }, "EventSubscriptionUpdated-DS-ROS-V080": { "description": "Event structure for event subscription updated", "allOf": [ { "$ref": "#/components/schemas/CloudEvent-DS-ROS-V080" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/SubscriptionUpdated-DS-ROS-V080" } } } ] }, "SubscriptionUpdated-DS-ROS-V080": { "description": "Event detail structure for subscription updated event", "type": "object", "required": [ "updateReason", "subscriptionId" ], "properties": { "device": { "$ref": "#/components/schemas/Device-DS-ROS-V080" }, "updateReason": { "$ref": "#/components/schemas/UpdateReason-DS-ROS-V080" }, "subscriptionId": { "$ref": "#/components/schemas/SubscriptionId-DS-ROS-V080" }, "updateDescription": { "description": "Description about the subscription update.", "type": "string" } } }, "UpdateReason-DS-ROS-V080": { "type": "string", "description": "- SUBSCRIPTION_ACTIVE - API server transitioned subscription status to `ACTIVE`\n- SUBSCRIPTION_INACTIVE - API server transitioned subscription status to `INACTIVE`\n", "enum": [ "SUBSCRIPTION_ACTIVE", "SUBSCRIPTION_INACTIVE" ] }, "BasicDeviceEventData-DS-ROS-V080": { "description": "Event detail structure for basic device events", "type": "object", "required": [ "subscriptionId" ], "properties": { "device": { "$ref": "#/components/schemas/DeviceResponse-DS-ROS-V080" }, "subscriptionId": { "$ref": "#/components/schemas/SubscriptionId-DS-ROS-V080" } } }, "RoamingStatus-DS-ROS-V080": { "description": "Event detail structure for org.camaraproject.device-roaming-status-subscriptions.v0.roaming-status event", "allOf": [ { "$ref": "#/components/schemas/BasicDeviceEventData-DS-ROS-V080" }, { "type": "object", "required": [ "roaming" ], "properties": { "roaming": { "type": "boolean", "description": "Roaming status. True, if it is roaming." }, "countryCode": { "$ref": "#/components/schemas/CountryCode-DS-ROS-V080" }, "countryName": { "$ref": "#/components/schemas/CountryName-DS-ROS-V080" } } } ] }, "RoamingChangeCountry-DS-ROS-V080": { "description": "Event detail structure for org.camaraproject.device-roaming-status-subscriptions.v0.roaming-on event", "allOf": [ { "$ref": "#/components/schemas/BasicDeviceEventData-DS-ROS-V080" }, { "type": "object", "required": [ "countryCode", "countryName" ], "properties": { "countryCode": { "$ref": "#/components/schemas/CountryCode-DS-ROS-V080" }, "countryName": { "$ref": "#/components/schemas/CountryName-DS-ROS-V080" } } } ] }, "SubscriptionEnded-DS-ROS-V080": { "description": "Event detail structure for org.camaraproject.device-roaming-status-subscriptions.v0.subscription-ended event", "allOf": [ { "$ref": "#/components/schemas/BasicDeviceEventData-DS-ROS-V080" }, { "type": "object", "required": [ "countryCode" ] } ], "required": [ "terminationReason" ], "properties": { "terminationReason": { "$ref": "#/components/schemas/TerminationReason-DS-ROS-V080" }, "terminationDescription": { "type": "string" } } }, "TerminationReason-DS-ROS-V080": { "type": "string", "description": "- NETWORK_TERMINATED - API server stopped sending notification\n- SUBSCRIPTION_EXPIRED - Subscription expire time (optionally set by the requester) has been reached\n- MAX_EVENTS_REACHED - Maximum number of events (optionally set by the requester) has been reached\n- ACCESS_TOKEN_EXPIRED - Access Token sinkCredential (optionally set by the requester) expiration time has been reached\n- SUBSCRIPTION_DELETED - Subscription was deleted by the requester\n", "enum": [ "MAX_EVENTS_REACHED", "NETWORK_TERMINATED", "SUBSCRIPTION_EXPIRED", "ACCESS_TOKEN_EXPIRED", "SUBSCRIPTION_DELETED" ] }, "HTTPSubscriptionRequest-DS-ROS-V080": { "allOf": [ { "$ref": "#/components/schemas/SubscriptionRequest-DS-ROS-V080" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/HTTPSettings-DS-ROS-V080" } } } ] }, "HTTPSubscriptionResponse-DS-ROS-V080": { "allOf": [ { "$ref": "#/components/schemas/Subscription-DS-ROS-V080" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/HTTPSettings-DS-ROS-V080" } } } ] }, "HTTPSettings-DS-ROS-V080": { "type": "object", "properties": { "headers": { "type": "object", "description": "A set of key/value pairs that is copied into the HTTP request as custom headers.\n\nNOTE: Use/Applicability of this concept has not been discussed in Commonalities under the scope of Meta Release v0.4. When required by an API project as an option to meet a UC/Requirement, please generate an issue for Commonalities discussion about it.", "additionalProperties": { "type": "string" } }, "method": { "type": "string", "description": "The HTTP method to use for sending the message.", "enum": [ "POST" ] } } }, "MQTTSubscriptionRequest-DS-ROS-V080": { "allOf": [ { "$ref": "#/components/schemas/SubscriptionRequest-DS-ROS-V080" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/MQTTSettings-DS-ROS-V080" } } } ] }, "MQTTSubscriptionResponse-DS-ROS-V080": { "allOf": [ { "$ref": "#/components/schemas/Subscription-DS-ROS-V080" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/MQTTSettings-DS-ROS-V080" } } } ] }, "MQTTSettings-DS-ROS-V080": { "type": "object", "properties": { "topicName": { "type": "string" }, "qos": { "type": "integer", "format": "int32" }, "retain": { "type": "boolean" }, "expiry": { "type": "integer", "format": "int32" }, "userProperties": { "type": "object" } }, "required": [ "topicName" ] }, "AMQPSubscriptionRequest-DS-ROS-V080": { "allOf": [ { "$ref": "#/components/schemas/SubscriptionRequest-DS-ROS-V080" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/AMQPSettings-DS-ROS-V080" } } } ] }, "AMQPSubscriptionResponse-DS-ROS-V080": { "allOf": [ { "$ref": "#/components/schemas/Subscription-DS-ROS-V080" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/AMQPSettings-DS-ROS-V080" } } } ] }, "AMQPSettings-DS-ROS-V080": { "type": "object", "properties": { "address": { "type": "string" }, "linkName": { "type": "string" }, "senderSettlementMode": { "type": "string", "enum": [ "settled", "unsettled" ] }, "linkProperties": { "type": "object", "additionalProperties": { "type": "string" } } } }, "ApacheKafkaSubscriptionRequest-DS-ROS-V080": { "allOf": [ { "$ref": "#/components/schemas/SubscriptionRequest-DS-ROS-V080" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/ApacheKafkaSettings-DS-ROS-V080" } } } ] }, "ApacheKafkaSubscriptionResponse-DS-ROS-V080": { "allOf": [ { "$ref": "#/components/schemas/Subscription-DS-ROS-V080" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/ApacheKafkaSettings-DS-ROS-V080" } } } ] }, "ApacheKafkaSettings-DS-ROS-V080": { "type": "object", "properties": { "topicName": { "type": "string" }, "partitionKeyExtractor": { "type": "string" }, "clientId": { "type": "string" }, "ackMode": { "type": "integer" } }, "required": [ "topicName" ] }, "NATSSubscriptionRequest-DS-ROS-V080": { "allOf": [ { "$ref": "#/components/schemas/SubscriptionRequest-DS-ROS-V080" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/NATSSettings-DS-ROS-V080" } } } ] }, "NATSSubscriptionResponse-DS-ROS-V080": { "allOf": [ { "$ref": "#/components/schemas/Subscription-DS-ROS-V080" }, { "type": "object", "properties": { "protocolSettings": { "$ref": "#/components/schemas/NATSSettings-DS-ROS-V080" } } } ] }, "NATSSettings-DS-ROS-V080": { "type": "object", "properties": { "subject": { "type": "string" } }, "required": [ "subject" ] }, "XCorrelator-DS-ROS-V080": { "type": "string", "pattern": "^[a-zA-Z0-9-_:;.\\/<>{}]{0,256}$", "example": "b4333c46-49c0-4f62-80d7-f0ef930f1c46" }, "RoamingStatusResponse-DS-V0": { "type": "object", "required": [ "roaming" ], "properties": { "roaming": { "$ref": "#/components/schemas/ActiveRoaming-DS-V0" }, "countryCode": { "$ref": "#/components/schemas/CountryCode-DS-V0" }, "countryName": { "$ref": "#/components/schemas/CountryName-DS-V0" } } }, "ActiveRoaming-DS-V0": { "description": "Roaming status. True, if it is roaming", "type": "boolean" }, "ConnectivityStatusResponse-DS-V0": { "type": "object", "required": [ "connectivityStatus" ], "properties": { "connectivityStatus": { "$ref": "#/components/schemas/ConnectivityStatus-DS-V0" } } }, "ConnectivityStatus-DS-V0": { "description": "CONNECTED_DATA: The device is connected to the network for Data usage\n\nCONNECTED_SMS: The device is connected to the network for SMS usage\n\nNOT_CONNECTED: The device is not connected\n", "type": "string", "enum": [ "CONNECTED_DATA", "CONNECTED_SMS", "NOT_CONNECTED" ] }, "Device-DS-V0": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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.\n", "type": "object", "properties": { "phoneNumber": { "$ref": "#/components/schemas/PhoneNumber-DS-V0" }, "networkAccessIdentifier": { "$ref": "#/components/schemas/NetworkAccessIdentifier-DS-V0" }, "ipv4Address": { "$ref": "#/components/schemas/DeviceIpv4Addr-DS-V0" }, "ipv6Address": { "$ref": "#/components/schemas/DeviceIpv6Address-DS-V0" } }, "minProperties": 1 }, "PhoneNumber-DS-V0": { "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, optionally prefixed with '+'.", "type": "string", "pattern": "^\\+?[0-9]{5,15}$", "example": "123456789" }, "NetworkAccessIdentifier-DS-V0": { "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" }, "DeviceIpv4Addr-DS-V0": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "$ref": "#/components/schemas/SingleIpv4Addr-DS-V0" }, "privateAddress": { "$ref": "#/components/schemas/SingleIpv4Addr-DS-V0" }, "publicPort": { "$ref": "#/components/schemas/Port-DS-V0" } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ], "example": { "publicAddress": "84.125.93.10", "publicPort": 59765 } }, "SingleIpv4Addr-DS-V0": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4", "example": "84.125.93.10" }, "Port-DS-V0": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 }, "DeviceIpv6Address-DS-V0": { "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).\n", "type": "string", "format": "ipv6", "example": "2001:db8:85a3:8d3:1319:8a2e:370:7344" }, "CountryCode-DS-V0": { "description": "The Mobile country code (MCC) as an geographic region identifier for the country and the dependent areas.", "type": "integer" }, "CountryName-DS-V0": { "description": "The ISO 3166 ALPHA-2 country-codes of mapped to mobile country code(MCC). If there is mapping of one MCC to multiple countries, then we have list of countries. If there is no mapping of MCC to any country, then an empty array [] shall be returned..", "type": "array", "items": { "type": "string" } }, "RequestRoamingStatus-DS-V0": { "type": "object", "properties": { "device": { "$ref": "#/components/schemas/Device-DS-V0" } }, "required": [ "device" ] }, "RequestConnectivityStatus-DS-V0": { "type": "object", "properties": { "device": { "$ref": "#/components/schemas/Device-DS-V0" } }, "required": [ "device" ] }, "ErrorInfo-DS-V0": { "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" } } }, "CreateSubscription-DS-V0": { "description": "The request for creating a Device Status event subscription", "type": "object", "required": [ "webhook", "subscriptionDetail" ], "properties": { "subscriptionDetail": { "$ref": "#/components/schemas/SubscriptionDetail-DS-V0" }, "subscriptionExpireTime": { "type": "string", "format": "date-time", "example": "2023-01-17T13:18:23.682Z", "description": "The subscription expiration time in date-time format." }, "webhook": { "$ref": "#/components/schemas/Webhook-DS-V0" } } }, "Webhook-DS-V0": { "description": "Webhook information for event channel", "type": "object", "required": [ "notificationUrl" ], "properties": { "notificationUrl": { "type": "string", "example": "https://application-server.com", "description": "https callback address where the event notification must be POST-ed" }, "notificationAuthToken": { "type": "string", "example": "c8974e592c2fa383d4a3960714", "description": "OAuth2 token to be used by the callback API endpoint. It MUST be indicated within HTTP Authorization header e.g. Authorization: Bearer $notificationAuthToken\n" } } }, "SubscriptionDetail-DS-V0": { "description": "The detail of the requested event subscription", "type": "object", "required": [ "type", "device" ], "properties": { "device": { "$ref": "#/components/schemas/Device-DS-V0" }, "type": { "$ref": "#/components/schemas/SubscriptionCreationEventType-DS-V0" } } }, "SubscriptionEventType-DS-V0": { "type": "string", "description": "roaming-status - Event triggered when the device switch from roaming ON to roaming OFF and conversely\n\nroaming-on - Event triggered when the device switch from roaming OFF to roaming ON\n\nroaming-off - Event triggered when the device switch from roaming ON to roaming OFF\n\nroaming-change-country - Event triggered when the device in roaming change country code\n\nconnectivity-data - Event triggered when the device is connected to the network for Data usage.\n\nconnectivity-sms - Event triggered when the device is connected to the network for SMS usage\n\nconnectivity-disconnected - Event triggered when the device is not connected.\n\nsubscription-ends - Event triggered when the subscription is terminated\n", "enum": [ "org.camaraproject.device-status.v0.roaming-status", "org.camaraproject.device-status.v0.roaming-on", "org.camaraproject.device-status.v0.roaming-off", "org.camaraproject.device-status.v0.roaming-change-country", "org.camaraproject.device-status.v0.connectivity-data", "org.camaraproject.device-status.v0.connectivity-sms", "org.camaraproject.device-status.v0.connectivity-disconnected", "org.camaraproject.device-status.v0.subscription-ends" ] }, "SubscriptionCreationEventType-DS-V0": { "type": "string", "description": "roaming-status - Event triggered when the device switch from roaming ON to roaming OFF and conversely\n\nroaming-on - Event triggered when the device switch from roaming OFF to roaming ON\n\nroaming-off - Event triggered when the device switch from roaming ON to roaming OFF\n\nroaming-change-country - Event triggered when the device in roaming change country code\n\nconnectivity-data - Event triggered when the device is connected to the network for Data usage.\n\nconnectivity-sms - Event triggered when the device is connected to the network for SMS usage\n\nconnectivity-disconnected - Event triggered when the device is not connected.\n", "enum": [ "org.camaraproject.device-status.v0.roaming-status", "org.camaraproject.device-status.v0.roaming-on", "org.camaraproject.device-status.v0.roaming-off", "org.camaraproject.device-status.v0.roaming-change-country", "org.camaraproject.device-status.v0.connectivity-data", "org.camaraproject.device-status.v0.connectivity-sms", "org.camaraproject.device-status.v0.connectivity-disconnected" ] }, "SubscriptionInfo-DS-V0": { "description": "Represents a device status subscription.", "allOf": [ { "$ref": "#/components/schemas/CreateSubscription-DS-V0" }, { "type": "object", "properties": { "subscriptionId": { "$ref": "#/components/schemas/SubscriptionId-DS-V0" }, "startsAt": { "type": "string", "format": "date-time", "description": "date time when subscription started" }, "expiresAt": { "type": "string", "format": "date-time", "description": "date time when subscription will expire or expired" } }, "required": [ "subscriptionId", "type" ] } ] }, "SubscriptionAsync-DS-V0": { "description": "Response for a device status operation managed asynchronously (Creation or Deletion)", "type": "object", "properties": { "subscriptionId": { "$ref": "#/components/schemas/SubscriptionId-DS-V0" } } }, "SubscriptionId-DS-V0": { "type": "string", "description": "The event subscription identifier.", "example": "qs15-h556-rt89-1298" }, "CloudEvent-DS-V0": { "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.", "example": "sd5e-uy52-88t4-za66" }, "source": { "$ref": "#/components/schemas/Source-DS-V0" }, "type": { "$ref": "#/components/schemas/SubscriptionEventType-DS-V0" }, "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)", "example": "1.0" }, "datacontenttype": { "type": "string", "description": "media-type that describes the event payload encoding, must be \"application/json\" for CAMARA APIs", "example": "application/json" }, "data": { "type": "object", "description": "Event details payload described in each CAMARA API and referenced by its type" }, "time": { "$ref": "#/components/schemas/DateTime-DS-V0" } }, "discriminator": { "propertyName": "type", "mapping": { "org.camaraproject.device-status.v0.roaming-status": "#/components/schemas/EventRoamingStatus", "org.camaraproject.device-status.v0.roaming-change-country": "#/components/schemas/EventRoamingChangeCountry", "org.camaraproject.device-status.v0.roaming-off": "#/components/schemas/EventRoamingOff", "org.camaraproject.device-status.v0.roaming-on": "#/components/schemas/EventRoamingOn", "org.camaraproject.device-status.v0.connectivity-data": "#/components/schemas/EventConnectivityData", "org.camaraproject.device-status.v0.connectivity-sms": "#/components/schemas/EventConnectivitySms", "org.camaraproject.device-status.v0.connectivity-disconnected": "#/components/schemas/EventConnectivityDisconnected", "org.camaraproject.device-status.v0.subscription-ends": "#/components/schemas/EventSubscriptionEnds" } } }, "Source-DS-V0": { "type": "string", "format": "uri-reference", "minLength": 1, "description": "Identifies the context in which an event happened in the specific Provider Implementation.", "example": "https://notificationSendServer12.supertelco.com" }, "DateTime-DS-V0": { "type": "string", "format": "date-time", "description": "Timestamp of when the occurrence happened. Must adhere to RFC 3339.", "example": "2018-04-05T17:31:00Z" }, "EventRoamingStatus-DS-V0": { "description": "event structure for roaming status change", "allOf": [ { "$ref": "#/components/schemas/CloudEvent-DS-V0" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/RoamingStatus-DS-V0" } } } ] }, "EventRoamingOn-DS-V0": { "description": "event structure for roaming on change", "allOf": [ { "$ref": "#/components/schemas/CloudEvent-DS-V0" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/BasicDeviceEventData-DS-V0" } } } ] }, "EventRoamingOff-DS-V0": { "description": "event structure for roaming off change", "allOf": [ { "$ref": "#/components/schemas/CloudEvent-DS-V0" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/BasicDeviceEventData-DS-V0" } } } ] }, "EventRoamingChangeCountry-DS-V0": { "description": "event structure for roaming change country", "allOf": [ { "$ref": "#/components/schemas/CloudEvent-DS-V0" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/RoamingChangeCountry-DS-V0" } } } ] }, "EventConnectivityData-DS-V0": { "description": "event structure for connectivity data usage", "allOf": [ { "$ref": "#/components/schemas/CloudEvent-DS-V0" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/BasicDeviceEventData-DS-V0" } } } ] }, "EventConnectivitySms-DS-V0": { "description": "event structure for connectivity SMS usage", "allOf": [ { "$ref": "#/components/schemas/CloudEvent-DS-V0" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/BasicDeviceEventData-DS-V0" } } } ] }, "EventConnectivityDisconnected-DS-V0": { "description": "event structure for disconnection", "allOf": [ { "$ref": "#/components/schemas/CloudEvent-DS-V0" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/BasicDeviceEventData-DS-V0" } } } ] }, "EventSubscriptionEnds-DS-V0": { "description": "event structure for event subscription ends", "allOf": [ { "$ref": "#/components/schemas/CloudEvent-DS-V0" }, { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/SubscriptionEnds-DS-V0" } } } ] }, "BasicDeviceEventData-DS-V0": { "description": "Event detail structure for basic device events", "type": "object", "required": [ "device" ], "properties": { "device": { "$ref": "#/components/schemas/Device-DS-V0" }, "subscriptionId": { "$ref": "#/components/schemas/SubscriptionId-DS-V0" } } }, "RoamingStatus-DS-V0": { "description": "Event detail structure for org.camaraproject.device-status.v0.roaming-status event", "type": "object", "required": [ "device", "roaming" ], "properties": { "device": { "$ref": "#/components/schemas/Device-DS-V0" }, "roaming": { "type": "boolean", "description": "Roaming status. True, if it is roaming." }, "countryCode": { "$ref": "#/components/schemas/CountryCode-DS-V0" }, "countryName": { "$ref": "#/components/schemas/CountryName-DS-V0" }, "subscriptionId": { "$ref": "#/components/schemas/SubscriptionId-DS-V0" } } }, "RoamingChangeCountry-DS-V0": { "description": "Event detail structure for org.camaraproject.device-status.v0.roaming-on event", "type": "object", "required": [ "device" ], "properties": { "device": { "$ref": "#/components/schemas/Device-DS-V0" }, "countryCode": { "$ref": "#/components/schemas/CountryCode-DS-V0" }, "countryName": { "$ref": "#/components/schemas/CountryName-DS-V0" }, "subscriptionId": { "$ref": "#/components/schemas/SubscriptionId-DS-V0" } } }, "SubscriptionEnds-DS-V0": { "description": "Event detail structure for org.camaraproject.device-status.v0.subscription-ends event", "type": "object", "required": [ "device", "terminationReason" ], "properties": { "device": { "$ref": "#/components/schemas/Device-DS-V0" }, "terminationReason": { "type": "string", "enum": [ "SUBSCRIPTION_EXPIRED", "NETWORK_TERMINATED" ] }, "subscriptionId": { "$ref": "#/components/schemas/SubscriptionId-DS-V0" } } }, "NumberVerificationRequestBody-NV-V1": { "type": "object", "description": "Payload to verify the phone number.", "minProperties": 1, "maxProperties": 1, "properties": { "phoneNumber": { "type": "string", "pattern": "^\\+[1-9][0-9]{4,14}$", "example": "+123456789", "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 '+'." }, "hashedPhoneNumber": { "description": "Hashed phone number. SHA-256 (in hexadecimal representation) of the mobile phone number in **E.164 format (starting with country code)**. Prefixed with '+'.", "type": "string", "example": "32f67ab4e4312618b09cd23ed8ce41b13e095fe52b73b2e8da8ef49830e50dba" } } }, "NumberVerificationMatchResponse-NV-V1": { "type": "object", "description": "Number verification result", "required": [ "devicePhoneNumberVerified" ], "properties": { "devicePhoneNumberVerified": { "$ref": "#/components/schemas/DevicePhoneNumberVerified-NV-V1" } } }, "NumberVerificationShareResponse-NV-V1": { "type": "object", "description": "Number verification share result", "required": [ "devicePhoneNumber" ], "properties": { "devicePhoneNumber": { "$ref": "#/components/schemas/DevicePhoneNumber-NV-V1" } } }, "DevicePhoneNumber-NV-V1": { "type": "string", "pattern": "^\\+[1-9][0-9]{4,14}$", "example": "+123456789", "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 '+'." }, "DevicePhoneNumberVerified-NV-V1": { "description": "Number verification. True, if it matches", "type": "boolean" }, "ErrorInfo-NV-V1": { "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" } } }, "XCorrelator-NV-V2": { "type": "string", "pattern": "^[a-zA-Z0-9-_:;.\\/<>{}]{0,256}$", "example": "b4333c46-49c0-4f62-80d7-f0ef930f1c46" }, "NokiaNumberVerificationCredential-NV-V2": { "description": "Nokia proprietary optional field. Encoded SD-JWT; when extracted and decoded, it may contain the TS.43 operator token and related claims.\n", "nullable": true }, "NumberVerificationRequestBody-NV-V2": { "description": "Payload to verify the phone number. Exactly one of `phoneNumber` or `hashedPhoneNumber` is required; `credential` is optional.", "oneOf": [ { "type": "object", "additionalProperties": false, "required": [ "phoneNumber" ], "properties": { "phoneNumber": { "type": "string", "pattern": "^\\+[1-9][0-9]{4,14}$", "example": "+123456789", "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 '+'." }, "credential": { "$ref": "#/components/schemas/NokiaNumberVerificationCredential-NV-V2" } } }, { "type": "object", "additionalProperties": false, "required": [ "hashedPhoneNumber" ], "properties": { "hashedPhoneNumber": { "description": "Hashed phone number. SHA-256 (in hexadecimal representation) of the mobile phone number in **E.164 format (starting with country code)**. Prefixed with '+'.", "type": "string", "pattern": "^[a-fA-F0-9]{64}$", "example": "32f67ab4e4312618b09cd23ed8ce41b13e095fe52b73b2e8da8ef49830e50dba" }, "credential": { "$ref": "#/components/schemas/NokiaNumberVerificationCredential-NV-V2" } } } ] }, "NumberVerificationMatchResponse-NV-V2": { "type": "object", "description": "Number verification result", "required": [ "devicePhoneNumberVerified" ], "properties": { "devicePhoneNumberVerified": { "$ref": "#/components/schemas/DevicePhoneNumberVerified-NV-V2" } } }, "NumberVerificationShareResponse-NV-V2": { "type": "object", "description": "Number verification share result", "required": [ "devicePhoneNumber" ], "properties": { "devicePhoneNumber": { "$ref": "#/components/schemas/DevicePhoneNumber-NV-V2" } } }, "DevicePhoneNumber-NV-V2": { "type": "string", "pattern": "^\\+[1-9][0-9]{4,14}$", "example": "+123456789", "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 '+'." }, "DevicePhoneNumberVerified-NV-V2": { "description": "Number verification. True, if it matches", "type": "boolean" }, "ErrorInfo-NV-V2": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, "VerifyRequestBody-KYC-AV-V0": { "type": "object", "description": "Request to verify the age threshold provided.", "required": [ "ageThreshold" ], "properties": { "ageThreshold": { "$ref": "#/components/schemas/AgeThreshold-KYC-AV-V0" }, "phoneNumber": { "$ref": "#/components/schemas/PhoneNumber-KYC-AV-V0" }, "idDocument": { "$ref": "#/components/schemas/IdDocument-KYC-AV-V0" }, "name": { "$ref": "#/components/schemas/Name-KYC-AV-V0" }, "givenName": { "$ref": "#/components/schemas/GivenName-KYC-AV-V0" }, "familyName": { "$ref": "#/components/schemas/FamilyName-KYC-AV-V0" }, "middleNames": { "$ref": "#/components/schemas/MiddleNames-KYC-AV-V0" }, "familyNameAtBirth": { "$ref": "#/components/schemas/FamilyNameAtBirth-KYC-AV-V0" }, "birthdate": { "$ref": "#/components/schemas/Birthdate-KYC-AV-V0" }, "email": { "$ref": "#/components/schemas/Email-KYC-AV-V0" }, "includeContentLock": { "$ref": "#/components/schemas/IncludeContentLock-KYC-AV-V0" }, "includeParentalControl": { "$ref": "#/components/schemas/IncludeParentalControl-KYC-AV-V0" } } }, "AgeThreshold-KYC-AV-V0": { "type": "integer", "minimum": 0, "maximum": 120, "description": "The age to be verified. The indicated range is a global definition of maximum and minimum values allowed to be requested. It is important to note that this range might be more restrictive in some implementations due to local regulations of a country i.e. A country does not allow to request for an age under 18. This limitation must be informed during the onboarding process." }, "PhoneNumber-KYC-AV-V0": { "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": "+99999991000" }, "IdDocument-KYC-AV-V0": { "type": "string", "description": "Id number associated to the official identity document in the country. It may contain alphanumeric characters." }, "Name-KYC-AV-V0": { "type": "string", "description": "Complete name of the customer, usually composed of first/given name and last/family/sur- name in a country. Depending on the country, the order of first/give name and last/family/sur- name varies, and middle name could be included. It can use givenName, middleNames, familyName and/or familyNameAtBirth. For example, in ESP, name+familyName; in NLD, it can be name+middleNames+familyName or name+middleNames+familyNameAtBirth, etc." }, "GivenName-KYC-AV-V0": { "type": "string", "description": "First/given name or compound first/given name of the customer." }, "FamilyName-KYC-AV-V0": { "type": "string", "description": "Last name, family name, or surname of the customer." }, "MiddleNames-KYC-AV-V0": { "type": "string", "description": "Middle name/s of the customer." }, "FamilyNameAtBirth-KYC-AV-V0": { "type": "string", "description": "Last/family/sur- name at birth of the customer." }, "Birthdate-KYC-AV-V0": { "type": "string", "format": "date", "description": "The birthdate of the customer, in RFC 3339 / ISO 8601 calendar date format (YYYY-MM-DD)." }, "Email-KYC-AV-V0": { "type": "string", "format": "email", "description": "Email address of the customer in the RFC specified format (local-part@domain)." }, "IncludeContentLock-KYC-AV-V0": { "type": "boolean", "default": false, "description": "If this parameter is included in the request with value `true`, the response property `contentLock` will be returned. If it is not included or its value is `false`, the response property will not be returned." }, "IncludeParentalControl-KYC-AV-V0": { "type": "boolean", "default": false, "description": "If this parameter is included in the request with value `true`, the response property `parentalControl` will be returned. If it is not included or its value is `false`, the response property will not be returned." }, "VerifyResponseBody-KYC-AV-V0": { "type": "object", "description": "Response to an age verification request", "required": [ "ageCheck" ], "properties": { "ageCheck": { "$ref": "#/components/schemas/AgeCheck-KYC-AV-V0" }, "verifiedStatus": { "$ref": "#/components/schemas/VerifiedStatus-KYC-AV-V0" }, "identityMatchScore": { "$ref": "#/components/schemas/IdentityMatchScore-KYC-AV-V0" }, "contentLock": { "$ref": "#/components/schemas/ContentLock-KYC-AV-V0" }, "parentalControl": { "$ref": "#/components/schemas/ParentalControl-KYC-AV-V0" } } }, "AgeCheck-KYC-AV-V0": { "type": "string", "description": "Indicate `\"true\"` when the age of the user is the same age or older than the age threshold (age >= age threshold), and `\"false\"` if not (age < age threshold). If the API Provider doesn't have enough information to perform the validation, a `not_available` can be returned.", "enum": [ "true", "false", "not_available" ] }, "VerifiedStatus-KYC-AV-V0": { "type": "boolean", "description": "Indicate `true` if the information provided has been compared against information based on an identification document legally accepted as an age verification document, otherwise indicate `false`." }, "IdentityMatchScore-KYC-AV-V0": { "type": "integer", "minimum": 0, "maximum": 100, "description": "The overall score of identity information available in the API Provider, information either provided in the request body comparing it to the one that the API Provider holds or directly using internal API Provider's information. It is optional for the API Provider to return the Identity match score." }, "ContentLock-KYC-AV-V0": { "type": "string", "description": "Indicate `\"true\"` if the subscription associated with the phone number has any kind of content lock (i.e certain web content blocked) and `\"false\"` if not. If the information is not available the value `not_available` can be returned.", "enum": [ "true", "false", "not_available" ] }, "ParentalControl-KYC-AV-V0": { "type": "string", "description": "Indicate `\"true\"` if the subscription associated with the phone number has any kind of parental control activated and `\"false\"` if not. If the information is not available the value `not_available` can be returned.", "enum": [ "true", "false", "not_available" ] }, "ErrorInfo-KYC-AV-V0": { "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" } } }, "KYC_MatchRequestBody-KYC-M-V0": { "type": "object", "description": "Payload to validate the customer data.", "properties": { "phoneNumber": { "type": "string", "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 '+'.", "pattern": "^\\+[1-9][0-9]{4,14}$", "example": "+123456789" }, "idDocument": { "type": "string", "description": "Id number associated to the official identity document in the country. It may contain alphanumeric characters." }, "name": { "type": "string", "description": "Complete name of the customer, usually composed of first/given name and last/family/sur- name in a country. Depending on the country, the order of first/give name and last/family/sur- name varies, and middle name could be included. It can use givenName, middleNames, familyName and/or familyNameAtBirth. For example, in ESP, name+familyName; in NLD, it can be name+middleNames+familyName or name+middleNames+familyNameAtBirth, etc." }, "givenName": { "type": "string", "description": "First/given name or compound first/given name of the customer." }, "familyName": { "type": "string", "description": "Last name, family name, or surname of the customer." }, "nameKanaHankaku": { "type": "string", "description": "Complete name of the customer in Hankaku-Kana format (reading of name) for Japan." }, "nameKanaZenkaku": { "type": "string", "description": "Complete name of the customer in Zenkaku-Kana format (reading of name) for Japan." }, "middleNames": { "type": "string", "description": "Middle name/s of the customer." }, "familyNameAtBirth": { "type": "string", "description": "Last/family/sur- name at birth of the customer." }, "address": { "type": "string", "description": "Complete address of the customer. For some countries, it is built following the usual concatenation of parameters in a country, but for other countries, this is not the case. For some countries, it can use streetName, streetNumber and/or houseNumberExtension. For example, in ESP, streetName+streetNumber; in NLD, it can be streetName+streetNumber or streetName+streetNumber+houseNumberExtension." }, "streetName": { "type": "string", "description": "Name of the street of the customer's address. It should not include the type of the street." }, "streetNumber": { "type": "string", "description": "The street number of the customer's address. Number identifying a specific property on the 'streetName'." }, "postalCode": { "type": "string", "description": "Zip code or postal code" }, "region": { "type": "string", "description": "Region/prefecture of the customer's address" }, "locality": { "type": "string", "description": "Locality of the customer's address" }, "country": { "type": "string", "description": "Country of the customer's address. Format ISO 3166-1 alpha-2" }, "houseNumberExtension": { "type": "string", "description": "Specific identifier of the house needed depending on the property type. For example, number of apartment in an apartment building." }, "birthdate": { "type": "string", "format": "date", "description": "The birthdate of the customer, in RFC 3339 / ISO 8601 calendar date format (YYYY-MM-DD)." }, "email": { "type": "string", "format": "email", "description": "Email address of the customer in the RFC specified format (local-part@domain)." }, "gender": { "type": "string", "description": "Gender of the customer (Male/Female/Other).", "enum": [ "MALE", "FEMALE", "OTHER" ] } } }, "MatchResult-KYC-M-V0": { "type": "string", "enum": [ "true", "false", "not_available" ] }, "MatchScoreResult-KYC-M-V0": { "type": "integer", "description": "Indicates the similarity score assigned to the input value when it does not exactly match the value stored in the operator's system. This property shall only be returned when the value of the corresponding match field is `false`.", "minimum": 0, "maximum": 100 }, "KYC_MatchResponse-KYC-M-V0": { "type": "object", "properties": { "idDocumentMatch": { "oneOf": [ { "$ref": "#/components/schemas/MatchResult-KYC-M-V0" }, { "description": "Indicates whether Id number associated to the ID document of the customer matches with the one on the Operator's system." } ] }, "nameMatch": { "oneOf": [ { "$ref": "#/components/schemas/MatchResult-KYC-M-V0" }, { "description": "Indicates whether the complete name of the customer matches with the one on the Operator's system." } ] }, "nameMatchScore": { "$ref": "#/components/schemas/MatchScoreResult-KYC-M-V0" }, "givenNameMatch": { "oneOf": [ { "$ref": "#/components/schemas/MatchResult-KYC-M-V0" }, { "description": "Indicates whether First name/given name of the customer matches with the one on the Operator's system." } ] }, "givenNameMatchScore": { "$ref": "#/components/schemas/MatchScoreResult-KYC-M-V0" }, "familyNameMatch": { "oneOf": [ { "$ref": "#/components/schemas/MatchResult-KYC-M-V0" }, { "description": "Indicates whether last name/ family name/ surname of the customer matches with the one on the Operator's system." } ] }, "familyNameMatchScore": { "$ref": "#/components/schemas/MatchScoreResult-KYC-M-V0" }, "nameKanaHankakuMatch": { "oneOf": [ { "$ref": "#/components/schemas/MatchResult-KYC-M-V0" }, { "description": "Indicates whether complete name of the customer in Hankaku-Kana format (reading of name) for Japan matches with the one on the Operator's system." } ] }, "nameKanaHankakuMatchScore": { "$ref": "#/components/schemas/MatchScoreResult-KYC-M-V0" }, "nameKanaZenkakuMatch": { "oneOf": [ { "$ref": "#/components/schemas/MatchResult-KYC-M-V0" }, { "description": "Indicates whether complete name of the customer in Zenkaku-Kana format (reading of name) for Japan matches with the one on the Operator's system." } ] }, "nameKanaZenkakuMatchScore": { "$ref": "#/components/schemas/MatchScoreResult-KYC-M-V0" }, "middleNamesMatch": { "oneOf": [ { "$ref": "#/components/schemas/MatchResult-KYC-M-V0" }, { "description": "Indicates whether the middle names of the customer matches with the one on the Operator's system." } ] }, "middleNamesMatchScore": { "$ref": "#/components/schemas/MatchScoreResult-KYC-M-V0" }, "familyNameAtBirthMatch": { "oneOf": [ { "$ref": "#/components/schemas/MatchResult-KYC-M-V0" }, { "description": "Indicates whether the Family Name At Birth of the customer matches with the one on the Operator's system." } ] }, "familyNameAtBirthMatchScore": { "$ref": "#/components/schemas/MatchScoreResult-KYC-M-V0" }, "addressMatch": { "oneOf": [ { "$ref": "#/components/schemas/MatchResult-KYC-M-V0" }, { "description": "Indicates whether complete address of the customer matches with the one on the Operator's system." } ] }, "addressMatchScore": { "$ref": "#/components/schemas/MatchScoreResult-KYC-M-V0" }, "streetNameMatch": { "oneOf": [ { "$ref": "#/components/schemas/MatchResult-KYC-M-V0" }, { "description": "Indicates whether the street name of the customer matches with the one on the Operator's system." } ] }, "streetNameMatchScore": { "$ref": "#/components/schemas/MatchScoreResult-KYC-M-V0" }, "streetNumberMatch": { "oneOf": [ { "$ref": "#/components/schemas/MatchResult-KYC-M-V0" }, { "description": "Indicates whether the street number of the customer matches with the one on the Operator's system." } ] }, "streetNumberMatchScore": { "$ref": "#/components/schemas/MatchScoreResult-KYC-M-V0" }, "postalCodeMatch": { "oneOf": [ { "$ref": "#/components/schemas/MatchResult-KYC-M-V0" }, { "description": "Indicates whether the postal code / zip code of the customer matches with the one on the Operator's system." } ] }, "regionMatch": { "oneOf": [ { "$ref": "#/components/schemas/MatchResult-KYC-M-V0" }, { "description": "Indicates whether the region of the customer's address matches with the one on the Operator's system." } ] }, "regionMatchScore": { "$ref": "#/components/schemas/MatchScoreResult-KYC-M-V0" }, "localityMatch": { "oneOf": [ { "$ref": "#/components/schemas/MatchResult-KYC-M-V0" }, { "description": "Indicates whether the locality of the customer's address matches with the one on the Operator's system." } ] }, "localityMatchScore": { "$ref": "#/components/schemas/MatchScoreResult-KYC-M-V0" }, "countryMatch": { "oneOf": [ { "$ref": "#/components/schemas/MatchResult-KYC-M-V0" }, { "description": "Indicates whether the country of the customer's address matches with the one on the Operator's system." } ] }, "houseNumberExtensionMatch": { "oneOf": [ { "$ref": "#/components/schemas/MatchResult-KYC-M-V0" }, { "description": "Indicates whether the house number extension of the customer's address with the one on the Operator's system." } ] }, "birthdateMatch": { "oneOf": [ { "$ref": "#/components/schemas/MatchResult-KYC-M-V0" }, { "description": "Indicates whether the birthdate of the customer matches with the one on the Operator's system." } ] }, "emailMatch": { "oneOf": [ { "$ref": "#/components/schemas/MatchResult-KYC-M-V0" }, { "description": "Indicates whether the email address of the customer matches with the one on the Operator's system." } ] }, "emailMatchScore": { "$ref": "#/components/schemas/MatchScoreResult-KYC-M-V0" }, "genderMatch": { "oneOf": [ { "$ref": "#/components/schemas/MatchResult-KYC-M-V0" }, { "description": "Indicates whether the gender of the customer matches with the one on the Operator's system." } ] } } }, "ErrorInfo-KYC-M-V0": { "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" } } }, "Tenure-KYC-T-V0": { "description": "Specifies date from which continuous tenure of the identified mobile subscriber is required to be confirmed", "type": "object", "properties": { "phoneNumber": { "$ref": "#/components/schemas/PhoneNumber-KYC-T-V0" }, "tenureDate": { "type": "string", "description": "The date, in RFC 3339 / ISO 8601 compliant format \"YYYY-MM-DD\", from which continuous tenure of the identified network subscriber is required to be confirmed", "format": "date", "example": "2023-07-03" } }, "required": [ "tenureDate" ] }, "PhoneNumber-KYC-T-V0": { "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": "+99999991000" }, "TenureInfo-KYC-T-V0": { "properties": { "tenureDateCheck": { "description": "`true` when the identified mobile subscription has had valid tenure since `tenureDate`, otherwise `false`\n", "example": true, "type": "boolean" }, "contractType": { "description": "If exists, populated with:\n- `PAYG` - prepaid (pay-as-you-go) account\n- `PAYM` - contract account\n- `Business` - Business (enterprise) account\nThis attribute may be omitted from the response set if the information is not available\n", "example": "PAYM", "type": "string", "enum": [ "PAYG", "PAYM", "Business" ] } }, "required": [ "tenureDateCheck" ] }, "ErrorInfo-KYC-T-V0": { "type": "object", "required": [ "message", "status", "code" ], "properties": { "message": { "type": "string", "description": "A human readable description of what the event represent" }, "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "Friendly Code to describe the error" } } }, "KYC_FillinRequest-KYC-FIN-V0": { "type": "object", "properties": { "phoneNumber": { "type": "string", "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 '+'.", "pattern": "^\\+[1-9][0-9]{4,14}$", "example": "+99999991000" } } }, "KYC_FillinResponse-KYC-FIN-V0": { "type": "object", "properties": { "phoneNumber": { "type": "string", "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 '+'.", "pattern": "^\\+[1-9][0-9]{4,14}$", "example": "+99999991000" }, "idDocument": { "type": "string", "description": "Id number associated to the id_document of the customer stored on the Operator's system." }, "idDocumentType": { "type": "string", "enum": [ "passport", "national_id_card", "residence_permit", "diplomatic_id", "driver_licence", "social_security_id", "other" ], "description": "Type of the official identity document provided." }, "idDocumentExpiryDate": { "type": "string", "format": "date", "description": "Expiration date of the identity document (ISO 8601)." }, "name": { "type": "string", "description": "Complete name of the customer stored on the Operator's system. It is usually composed of first/given name and last/family/sur- name in a country. Depending on the country, the order of first/give name and last/family/sur- name varies, and middle name could be included. It can use givenName, middleNames, familyName and/or familyNameAtBirth. For example, in ESP, name+familyName; in NLD, it can be name+middleNames+familyName or name+middleNames+familyNameAtBirth, etc." }, "givenName": { "type": "string", "description": "First/given name or compound first/given name of the customer on the Operator's system." }, "familyName": { "type": "string", "description": "Last name, family name, or surname of the customer stored on the Operator's system." }, "nameKanaHankaku": { "type": "string", "description": "Complete name of the customer in Hankaku-Kana format (reading of name) for Japan, stored on the Operator's system." }, "nameKanaZenkaku": { "type": "string", "description": "Complete name of the customer in Zenkaku-Kana format (reading of name) for Japan, stored on the Operator's system." }, "middleNames": { "type": "string", "description": "Middle name/s of the customer stored on the Operator's system." }, "familyNameAtBirth": { "type": "string", "description": "Last/family/sur- name at birth of the customer stored on the Operator's system." }, "address": { "type": "string", "description": "Complete address of the customer stored on the Operator's system. For some countries, it is built following the usual concatenation of parameters in a country, but for other countries, this is not the case. For some countries, it can use streetName, streetNumber and/or houseNumberExtension. For example, in ESP, streetName+streetNumber; in NLD, it can be streetName+streetNumber or streetName+streetNumber+houseNumberExtension." }, "streetName": { "type": "string", "description": "Name of the street of the customer's address on the Operator's system. It should not include the type of the street." }, "streetNumber": { "type": "string", "description": "The street number of the customer's address on the Operator's system. Number identifying a specific property on the 'streetName'." }, "postalCode": { "type": "string", "description": "The postal code or Zip code of the customer's address, stored on the Operator's system." }, "region": { "type": "string", "description": "Region/prefecture of the customer's address, stored on the Operator's system." }, "locality": { "type": "string", "description": "Locality of the customer's address, stored on the Operator's system." }, "country": { "type": "string", "description": "Country of the customer's address stored on the Operator's system. Format ISO 3166-1 alpha-2." }, "houseNumberExtension": { "type": "string", "description": "House number extension of the customer stored on the Operator's system. Specific identifier of the house needed depending on the property type. For example, number of apartment in an apartment building." }, "birthdate": { "type": "string", "format": "date", "description": "Birthdate of the customer, in ISO 8601 calendar date format (YYYY-MM-DD), stored on the Operator's system." }, "email": { "type": "string", "format": "email", "description": "Email address of the customer in the RFC specified format (local-part@domain), stored on the Operator's system." }, "gender": { "type": "string", "description": "Gender of the customer stored on the Operator's system (Male/Female/Other).", "enum": [ "MALE", "FEMALE", "OTHER" ] }, "cityOfBirth": { "type": "string", "description": "City where the customer was born." }, "countryOfBirth": { "type": "string", "description": "Country where the customer was born. Format ISO 3166-1 alpha-2." }, "nationality": { "type": "string", "description": "ISO 3166-1 alpha-2 code of the customer’s nationality. In the case a customer has more than one nationality, it is supposed to be the nationality related to the ID document provided in the match request." } } }, "ErrorInfo-KYC-FIN-V0": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, "XCorrelator-KYC-FIN-V0": { "type": "string", "pattern": "^[a-zA-Z0-9-_:;.\\/<>{}]{0,256}$", "example": "b4333c46-49c0-4f62-80d7-f0ef930f1c46" }, "CreateCheckNumRecycling-NUMR-RECYCL-V0": { "type": "object", "required": [ "specifiedDate" ], "properties": { "phoneNumber": { "$ref": "#/components/schemas/PhoneNumber-NUMR-RECYCL-V0" }, "specifiedDate": { "type": "string", "format": "date", "description": "Specified date to check whether there has been a change in the subscriber associated with the specific phone number, in RFC 3339 calendar date format (YYYY-MM-DD).", "example": "2024-10-31" } } }, "PhoneNumber-NUMR-RECYCL-V0": { "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" }, "CheckNumRecyclingInfo-NUMR-RECYCL-V0": { "type": "object", "required": [ "phoneNumberRecycled" ], "properties": { "phoneNumberRecycled": { "type": "boolean", "description": "Set to true (Boolean, not string) when there has been a change in the subscriber associated with the specific phone number after “specifiedDate”.\n" } } }, "ErrorInfo-NUMR-RECYCL-V0": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, "XCorrelator-NUMR-RECYCL-V0": { "type": "string", "pattern": "^[a-zA-Z0-9-_:;.\\/<>{}]{0,256}$", "example": "b4333c46-49c0-4f62-80d7-f0ef930f1c46" }, "SimSwapInfo-SIM-V1": { "type": "object", "required": [ "latestSimChange" ], "properties": { "latestSimChange": { "type": "string", "format": "date-time", "description": "Timestamp of latest SIM swap performed. It must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone. Recommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)", "nullable": true, "example": "2023-07-03T14:27:08.312+02:00" } } }, "CheckSimSwapInfo-SIM-V1": { "type": "object", "required": [ "swapped" ], "properties": { "swapped": { "type": "boolean", "description": "Indicates whether the SIM card has been swapped during the period within the provided age." } } }, "PhoneNumber-SIM-V1": { "type": "string", "pattern": "^\\+[1-9][0-9]{4,14}$", "example": "+346661113334", "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 '+'." }, "ErrorInfo-SIM-V1": { "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" } } }, "CreateCheckSimSwap-SIM-V1": { "type": "object", "properties": { "phoneNumber": { "$ref": "#/components/schemas/PhoneNumber-SIM-V1" }, "maxAge": { "type": "integer", "example": 240, "description": "Period in hours to be checked for SIM swap.\n", "format": "int32", "minimum": 1, "maximum": 2400, "default": 240 } } }, "CreateSimSwapDate-SIM-V1": { "type": "object", "properties": { "phoneNumber": { "$ref": "#/components/schemas/PhoneNumber-SIM-V1" } } }, "XCorrelator-DSWAP-V1": { "type": "string", "pattern": "^[a-zA-Z0-9-_:;.\\/<>{}]{0,256}$", "example": "b4333c46-49c0-4f62-80d7-f0ef930f1c46" }, "DeviceSwapInfo-DSWAP-V1": { "type": "object", "required": [ "latestDeviceChange" ], "properties": { "latestDeviceChange": { "type": "string", "format": "date-time", "description": "Timestamp of latest device swap performed. It must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone. Recommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)", "nullable": true, "example": "2023-07-03T14:27:08.312+02:00" }, "monitoredPeriod": { "type": "integer", "description": "Timeframe in days for device change supervision for the phone number. It could be valued in the response if the latest Device swap occurred before this monitored period.", "example": 120 } } }, "CreateDeviceSwapDate-DSWAP-V1": { "type": "object", "properties": { "phoneNumber": { "$ref": "#/components/schemas/PhoneNumber-DSWAP-V1" } } }, "CreateCheckDeviceSwap-DSWAP-V1": { "type": "object", "properties": { "phoneNumber": { "$ref": "#/components/schemas/PhoneNumber-DSWAP-V1" }, "maxAge": { "type": "integer", "example": 240, "description": "Period in hours to be checked for device swap.\n", "format": "int32", "minimum": 1, "maximum": 2400, "default": 240 } } }, "PhoneNumber-DSWAP-V1": { "type": "string", "pattern": "^\\+[1-9][0-9]{4,14}$", "example": "+34666111333", "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 '+'." }, "CheckDeviceSwapInfo-DSWAP-V1": { "type": "object", "required": [ "swapped" ], "properties": { "swapped": { "type": "boolean", "description": "Indicates whether the device has been swapped during the period within the provided age." } } }, "ErrorInfo-DSWAP-V1": { "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" } } }, "SessionId-QoD-V0": { "description": "Session ID in UUID format", "type": "string", "format": "uuid" }, "BaseSessionInfo-QoD-V0": { "description": "Common attributes of a QoD session", "type": "object", "properties": { "device": { "$ref": "#/components/schemas/Device-QoD-V0" }, "applicationServer": { "$ref": "#/components/schemas/ApplicationServer-QoD-V0" }, "devicePorts": { "description": "The ports used locally by the device for flows to which the requested QoS profile should apply. If omitted, then the qosProfile will apply to all flows between the device and the specified application server address and ports", "allOf": [ { "$ref": "#/components/schemas/PortsSpec-QoD-V0" } ] }, "applicationServerPorts": { "description": "A list of single ports or port ranges on the application server", "allOf": [ { "$ref": "#/components/schemas/PortsSpec-QoD-V0" } ] }, "qosProfile": { "$ref": "#/components/schemas/QosProfileName-QoD-V0" }, "webhook": { "type": "object", "required": [ "notificationUrl" ], "properties": { "notificationUrl": { "type": "string", "format": "uri", "example": "https://application-server.com", "description": "Allows asynchronous delivery of session related events" }, "notificationAuthToken": { "type": "string", "minLength": 20, "maxLength": 256, "example": "c8974e592c2fa383d4a3960714", "description": "Authentication token for callback API" } } } }, "required": [ "device", "applicationServer", "qosProfile" ] }, "SessionInfo-QoD-V0": { "description": "Session related information.", "allOf": [ { "$ref": "#/components/schemas/BaseSessionInfo-QoD-V0" }, { "type": "object", "properties": { "sessionId": { "$ref": "#/components/schemas/SessionId-QoD-V0" }, "duration": { "type": "integer", "format": "int32", "minimum": 1, "example": 86400 }, "startedAt": { "type": "integer", "example": 1639479600, "description": "Timestamp of session start in seconds since Unix epoch", "format": "int64" }, "expiresAt": { "type": "integer", "example": 1639566000, "description": "Timestamp of session expiration if the session was not deleted, in seconds since Unix epoch", "format": "int64" }, "qosStatus": { "$ref": "#/components/schemas/QosStatus-QoD-V0" }, "messages": { "type": "array", "items": { "$ref": "#/components/schemas/Message-QoD-V0" } } }, "required": [ "sessionId", "duration", "startedAt", "expiresAt", "qosStatus" ] } ] }, "CreateSession-QoD-V0": { "description": "Attributes required to create a session", "allOf": [ { "$ref": "#/components/schemas/BaseSessionInfo-QoD-V0" }, { "type": "object", "properties": { "duration": { "description": "Session duration in seconds. Maximal value of 24 hours is used if not set.\nAfter session is expired the, client will receive a `QOS_STATUS_CHANGED` event with\n- `qosStatus` as `UNAVAILABLE`, and,\n- `statusInfo` as `DURATION_EXPIRED`.\nSee notification callback.\n", "type": "integer", "format": "int32", "minimum": 1, "maximum": 86400, "default": 86400, "example": 86400 } } } ] }, "Port-QoD-V0": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 }, "ValidationError-QoD-V0": { "properties": { "loc": { "items": { "anyOf": [ { "type": "string" }, { "type": "integer" } ] }, "type": "array", "title": "Location" }, "msg": { "type": "string", "title": "Message" }, "type": { "type": "string", "title": "Error Type" } }, "type": "object", "required": [ "loc", "msg", "type" ], "title": "ValidationError" }, "HTTPValidationError-QoD-V0": { "properties": { "detail": { "items": { "$ref": "#/components/schemas/ValidationError-QoD-V0" }, "type": "array", "title": "Detail" } }, "type": "object", "title": "HTTPValidationError" }, "PortsSpec-QoD-V0": { "type": "object", "minProperties": 1, "properties": { "ranges": { "type": "array", "minItems": 1, "items": { "type": "object", "required": [ "from", "to" ], "properties": { "from": { "$ref": "#/components/schemas/Port-QoD-V0" }, "to": { "$ref": "#/components/schemas/Port-QoD-V0" } } } }, "ports": { "type": "array", "minItems": 1, "items": { "$ref": "#/components/schemas/Port-QoD-V0" } } }, "example": { "ranges": [ { "from": 5010, "to": 5020 } ], "ports": [ 5060, 5070 ] } }, "ExtendSessionDuration-QoD-V0": { "description": "Attributes required to extend the duration of an active session", "type": "object", "properties": { "requestedAdditionalDuration": { "description": "Additional duration in seconds to be extended.\n", "type": "integer", "format": "int32", "minimum": 1, "maximum": 86399, "example": 60 } }, "required": [ "requestedAdditionalDuration" ] }, "QosProfile-QoD-V0": { "description": "Data type with attributes of a QosProfile\n", "type": "object", "properties": { "name": { "$ref": "#/components/schemas/QosProfileName-QoD-V0" }, "description": { "description": "A description of the QoS profile.\n", "type": "string", "example": "QoS profile for video streaming" }, "status": { "$ref": "#/components/schemas/QosProfileStatusEnum-QoD-V0" }, "targetMinUpstreamRate": { "description": "This is the target minimum upstream rate for the QoS profile.\nFor 5G networks 3GPP Guaranteed Bit Rate (GBR) refers to a dedicated, fixed data rate assigned to\nspecific services, ensuring a minimum performance level. As per 3GPP TS 23.203,\nGBR is a QoS parameter used to manage traffic classes in mobile networks. It\nprovides a stable data rate for latency-sensitive applications, such as voice calls or\nvideo streaming, helping maintain a consistent user experience. When this attribute is set\nthis could imply that a GBR QCI is used, though mechanisms on the network can be used to\nensure a minimum performance level without using a GBR QCI.\nThe committed data rate allocated to specific services, ensuring a consistent level of\nperformance. For DOCSIS networks, the \"Minimum Reserved Traffic Rate\" is defined in the\nDOCSIS 3.1 - MAC and Upper Layer Protocols Interface Specification\"\nand it ensures a consistent level of performance for specific services within the network.\n", "allOf": [ { "$ref": "#/components/schemas/Rate-QoD-V0" } ] }, "maxUpstreamRate": { "description": "The maximum best effort data\n", "allOf": [ { "$ref": "#/components/schemas/Rate-QoD-V0" } ] }, "maxUpstreamBurstRate": { "description": "When defined, this is the maximum upstream burst rate for the QoS profile, that will enable\nthe network to burst data at a higher rate than the maxUpstreamRate for a period of time.\n", "allOf": [ { "$ref": "#/components/schemas/Rate-QoD-V0" } ] }, "targetMinDownstreamRate": { "description": "This is the target minimum downstream rate for the QoS profile.\nFor 5G networks 3GPP Guaranteed Bit Rate (GBR) refers to a dedicated, fixed data rate assigned to\nspecific services, ensuring a minimum performance level. As per 3GPP TS 23.203,\nGBR is a QoS parameter used to manage traffic classes in mobile networks. It\nprovides a stable data rate for latency-sensitive applications, such as voice calls or\nvideo streaming, helping maintain a consistent user experience. When this attribute is set\nthis could imply that a GBR QCI is used, though mechanisms on the network can be used to\nensure a minimum performance level without using a GBR QCI.\nThe committed data rate allocated to specific services, ensuring a consistent level of\nperformance. DOCSIS networks, the \"Minimum Reserved Traffic Rate\" is defined in the\nDOCSIS 3.1 - MAC and Upper Layer Protocols Interface Specification\"\nand it ensures a consistent level of performance for specific services within the network.\n", "allOf": [ { "$ref": "#/components/schemas/Rate-QoD-V0" } ] }, "maxDownstreamRate": { "description": "The maximum best effort rate\n", "allOf": [ { "$ref": "#/components/schemas/Rate-QoD-V0" } ] }, "maxDownstreamBurstRate": { "description": "When defined, this is the maximum downstream burst rate for the QoS profile, that will enable\nthe network to burst data at a higher rate than the maxDownstreamRate for a period of time.\nThis can result in improved user experience when there is additional network capacity.\nFor instance, when a user is streaming a video, the network can burst data at a higher rate\nto fill the buffer, and then return to the maxUpstreamRate once the buffer is full.\n", "allOf": [ { "$ref": "#/components/schemas/Rate-QoD-V0" } ] }, "minDuration": { "description": "The shortest time period that this profile can be deployed.\n", "allOf": [ { "$ref": "#/components/schemas/Duration-QoD-V0" } ] }, "maxDuration": { "description": "The maximum time period that this profile can be deployed.\nNOTE: currently the duration within `sessionInfo` is limited to 86400 seconds (1 day).\nThe value of `maxDuration` shouldn't therefore exceed this time period. The limitation might be removed in later versions.\n", "allOf": [ { "$ref": "#/components/schemas/Duration-QoD-V0" } ] }, "priority": { "type": "integer", "example": 20, "description": "Priority levels allow efficient resource allocation and ensure optimal performance\nfor various services in each technology, with the highest priority traffic receiving\npreferential treatment.\nThe lower value the higher priority.\nNot all access networks use the same priority range, so this priority will be\nscaled to the access network's priority range.\n", "format": "int32", "minimum": 1, "maximum": 100 }, "packetDelayBudget": { "description": "The packet delay budget is the maximum allowable one-way latency between the customer's device\nand the gateway from the operator's network to other networks. By limiting the delay, the network\ncan provide an acceptable level of performance for various services, such as voice calls,\nvideo streaming, and data.\nThe end-to-end or round trip latency will be about two times this value plus the latency not controlled\nby the operator\n", "allOf": [ { "$ref": "#/components/schemas/Duration-QoD-V0" } ] }, "jitter": { "description": "The jitter requirement aims to limit the maximum variation in round-trip\npacket delay for the 99th percentile of traffic, following ITU Y.1540\nstandards. It considers only acknowledged packets in a session, which are\npackets that receive a confirmation of receipt from the recipient (e.g.,\nusing TCP). This requirement helps maintain consistent latency, essential\nfor real-time applications such as VoIP, video calls, and gaming.\n", "allOf": [ { "$ref": "#/components/schemas/Duration-QoD-V0" } ] }, "packetErrorLossRate": { "type": "integer", "description": "The exponential power of the allowable error loss rate 10^(-N).\nFor instance 3 would be an error loss rate of 10 to the power of -3 (0.001)\n\nFor 5G network the 3GPP specification TS 23.203 defines the packet error loss rate QCI attribute. It\ndescribes the Quality of Service (QoS) Class Identifier (QCI) parameters used to\ndifferentiate traffic classes in mobile networks, ensuring appropriate resource\nallocation and performance for various services.\n\nThe packet error loss rate is one of the QCI attributes, providing information on the\nacceptable packet loss rate for a specific traffic class. This attribute helps maintain\nthe desired performance level for services like voice calls, video streaming, or data\ntransfers within the 3GPP mobile network.\n", "format": "int32", "minimum": 1, "maximum": 10, "example": 3 } }, "required": [ "name", "status" ] }, "QosProfileName-QoD-V0": { "description": "A unique name for identifying a specific QoS profile.\nThis may follow different formats depending on the service providers implementation.\nSome options addresses:\n\n\n\n\n\n - A UUID style string\n - Support for predefined profiles QOS_S, QOS_M, QOS_L, and QOS_E\n - A searchable descriptive name\n", "type": "string", "example": "QCI_1_voice", "minLength": 3, "maxLength": 256, "format": "string", "pattern": "^[a-zA-Z0-9_.-]+$" }, "Rate-QoD-V0": { "type": "object", "properties": { "value": { "type": "integer", "example": 10, "format": "int32", "minimum": 0, "maximum": 1024 }, "unit": { "$ref": "#/components/schemas/RateUnitEnum-QoD-V0" } } }, "Duration-QoD-V0": { "type": "object", "properties": { "value": { "type": "integer", "example": 12, "format": "int32", "minimum": 1 }, "unit": { "allOf": [ { "$ref": "#/components/schemas/TimeUnitEnum-QoD-V0" }, { "example": "Minutes" } ] } } }, "TimeUnitEnum-QoD-V0": { "type": "string", "enum": [ "Days", "Hours", "Minutes", "Seconds", "Milliseconds", "Microseconds", "Nanoseconds" ] }, "QosProfileStatusEnum-QoD-V0": { "description": "The current status of the QoS Profile\n- `ACTIVE`- QoS Profile is available to be used\n- `INACTIVE`- QoS Profile is not currently available to be deployed\n- `DEPRECATED`- QoS profile is actively being used in a QoD session, but can not be deployed in new QoD sessions\n", "type": "string", "enum": [ "ACTIVE", "INACTIVE", "DEPRECATED" ] }, "RateUnitEnum-QoD-V0": { "type": "string", "enum": [ "bps", "kbps", "Mbps", "Gbps", "Tbps" ] }, "CloudEvent-QoD-V0": { "description": "Event compliant with the CloudEvents specification", "required": [ "id", "source", "specversion", "type", "time" ], "properties": { "id": { "description": "Identifier of this event, that must be unique in the source context.", "type": "string" }, "source": { "description": "Identifies the context in which an event happened in the specific Provider Implementation.", "type": "string", "format": "uri-reference" }, "type": { "description": "The type of the event.", "type": "string", "enum": [ "org.camaraproject.qod.v0.qos-status-changed" ] }, "specversion": { "description": "Version of the specification to which this event conforms (must be 1.0 if it conforms to cloudevents 1.0.2 version)", "type": "string", "enum": [ "1.0" ] }, "datacontenttype": { "description": "media-type that describes the event payload encoding, must be \"application/json\" for CAMARA APIs", "type": "string", "enum": [ "application/json" ] }, "data": { "description": "Event notification details payload, which depends on the event type", "type": "object" }, "time": { "description": "Timestamp of when the occurrence happened. It must follow RFC 3339\n", "type": "string", "format": "date-time" } }, "discriminator": { "propertyName": "type", "mapping": { "org.camaraproject.qod.v0.qos-status-changed": "#/components/schemas/EventQosStatusChanged" } } }, "EventQosStatusChanged-QoD-V0": { "allOf": [ { "$ref": "#/components/schemas/CloudEvent-QoD-V0" }, { "type": "object", "properties": { "data": { "type": "object", "description": "Event details depending on the event type", "required": [ "sessionId", "qosStatus" ], "properties": { "sessionId": { "$ref": "#/components/schemas/SessionId-QoD-V0" }, "qosStatus": { "$ref": "#/components/schemas/EventQosStatus-QoD-V0" }, "statusInfo": { "$ref": "#/components/schemas/StatusInfo-QoD-V0" } } } }, "required": [ "data" ] } ] }, "StatusInfo-QoD-V0": { "description": "Reason for the new `qosStatus`. Currently `statusInfo` is only applicable when `qosStatus` is 'UNAVAILABLE'.\n* `DURATION_EXPIRED` - Session terminated due to requested duration expired\n* `NETWORK_TERMINATED` - Network terminated the session before the requested duration expired\n* `DELETE_REQUESTED`- User requested the deletion of the session before the requested duration expired\n", "type": "string", "enum": [ "DURATION_EXPIRED", "NETWORK_TERMINATED", "DELETE_REQUESTED" ] }, "Device-QoD-V0": { "description": "End-user equipment able to connect to a mobile network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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\n", "type": "object", "properties": { "phoneNumber": { "$ref": "#/components/schemas/PhoneNumber-QoD-V0" }, "networkAccessIdentifier": { "$ref": "#/components/schemas/NetworkAccessIdentifier-QoD-V0" }, "ipv4Address": { "$ref": "#/components/schemas/DeviceIpv4Addr-QoD-V0" }, "ipv6Address": { "$ref": "#/components/schemas/DeviceIpv6Address-QoD-V0" } }, "minProperties": 1 }, "ApplicationServer-QoD-V0": { "description": "A server hosting backend applications to deliver some business logic to clients.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n", "type": "object", "properties": { "ipv4Address": { "$ref": "#/components/schemas/ApplicationServerIpv4Address-QoD-V0" }, "ipv6Address": { "$ref": "#/components/schemas/ApplicationServerIpv6Address-QoD-V0" } }, "minProperties": 1 }, "NetworkAccessIdentifier-QoD-V0": { "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" }, "PhoneNumber-QoD-V0": { "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, optionally prefixed with '+'.", "type": "string", "pattern": "^\\+?[0-9]{5,15}$", "example": "123456789" }, "DeviceIpv4Addr-QoD-V0": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "$ref": "#/components/schemas/SingleIpv4Addr-QoD-V0" }, "privateAddress": { "$ref": "#/components/schemas/SingleIpv4Addr-QoD-V0" }, "publicPort": { "$ref": "#/components/schemas/Port-QoD-V0" } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ], "example": { "publicAddress": "84.125.93.10", "publicPort": 59765 } }, "SingleIpv4Addr-QoD-V0": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4", "example": "84.125.93.10" }, "DeviceIpv6Address-QoD-V0": { "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).\n\nThe session shall apply to all IP flows between the device subnet and the specified application server, unless further restricted by the optional parameters devicePorts or applicationServerPorts.\n", "type": "string", "format": "ipv6", "example": "2001:db8:85a3:8d3:1319:8a2e:370:7344" }, "ApplicationServerIpv4Address-QoD-V0": { "type": "string", "example": "192.168.0.1/24", "description": "IPv4 address may be specified in form
as:\n - address - an IPv4 number in dotted-quad form 1.2.3.4. Only this exact IP number will match the flow control rule.\n - address/mask - an IP number as above with a mask width of the form 1.2.3.4/24.\n In this case, all IP numbers from 1.2.3.0 to 1.2.3.255 will match. The bit width MUST be valid for the IP version.\n" }, "ApplicationServerIpv6Address-QoD-V0": { "type": "string", "example": "2001:db8:85a3:8d3:1319:8a2e:370:7344", "description": "IPv6 address may be specified in form
as:\n - address - The /128 subnet is optional for single addresses:\n - 2001:db8:85a3:8d3:1319:8a2e:370:7344\n - 2001:db8:85a3:8d3:1319:8a2e:370:7344/128\n - address/mask - an IP v6 number with a mask:\n - 2001:db8:85a3:8d3::0/64\n - 2001:db8:85a3:8d3::/64\n" }, "Message-QoD-V0": { "type": "object", "properties": { "severity": { "description": "Message severity", "type": "string", "enum": [ "INFO", "WARNING" ] }, "description": { "description": "Detailed message text", "type": "string" } }, "required": [ "severity", "description" ] }, "QosStatus-QoD-V0": { "description": "The current status of the requested QoS session. The status can be one of the following:\n* `REQUESTED` - QoS has been requested by creating a session\n* `AVAILABLE` - The requested QoS has been provided by the network\n* `UNAVAILABLE` - The requested QoS cannot be provided by the network due to some reason\n", "type": "string", "enum": [ "REQUESTED", "AVAILABLE", "UNAVAILABLE" ] }, "RetrieveSessionInput-QoD-V0": { "properties": { "device": { "$ref": "#/components/schemas/Device-QoD-V0" } }, "type": "object", "required": [ "device" ], "title": "RetrieveSessionInput" }, "EventQosStatus-QoD-V0": { "description": "The current status of a requested or previously available session. Applicable values in the event are:\n* `AVAILABLE` - The requested QoS has been provided by the network.\n* `UNAVAILABLE` - A requested or previously available QoS session is now unavailable. `statusInfo` may provide additional information about the reason for the unavailability.\n", "type": "string", "enum": [ "AVAILABLE", "UNAVAILABLE" ] }, "ErrorInfo-QoD-V0": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] }, "SessionId-QoD-V1": { "description": "Session ID in UUID format", "type": "string", "format": "uuid" }, "BaseSessionInfo-QoD-V1": { "description": "Common attributes of a QoD session", "type": "object", "properties": { "device": { "$ref": "#/components/schemas/Device-QoD-V1" }, "applicationServer": { "$ref": "#/components/schemas/ApplicationServer-QoD-V1" }, "devicePorts": { "description": "The ports used locally by the device for flows to which the requested QoS profile should apply. If omitted, then the qosProfile will apply to all flows between the device and the specified application server address and ports", "allOf": [ { "$ref": "#/components/schemas/PortsSpec-QoD-V1" } ] }, "applicationServerPorts": { "description": "A list of single ports or port ranges on the application server", "allOf": [ { "$ref": "#/components/schemas/PortsSpec-QoD-V1" } ] }, "qosProfile": { "$ref": "#/components/schemas/QosProfileName-QoD-V1" }, "sink": { "type": "string", "format": "uri", "description": "The address to which events about all status changes of the session (e.g. session termination) shall be delivered using the selected protocol.", "example": "https://endpoint.example.com/sink" }, "sinkCredential": { "description": "A sink credential provides authentication or authorization information necessary to enable delivery of events to a target.", "allOf": [ { "$ref": "#/components/schemas/SinkCredential-QoD-V1" } ] } }, "required": [ "applicationServer", "qosProfile" ] }, "SessionInfo-QoD-V1": { "description": "Session related information.", "allOf": [ { "$ref": "#/components/schemas/BaseSessionInfo-QoD-V1" }, { "type": "object", "properties": { "sessionId": { "$ref": "#/components/schemas/SessionId-QoD-V1" }, "duration": { "type": "integer", "format": "int32", "minimum": 1, "example": 86400 }, "startedAt": { "description": "Date and time when the QoS status became \"AVAILABLE\". Not to be returned when `qosStatus` is \"REQUESTED\". Format must follow RFC 3339 and must indicate time zone (UTC or local).", "type": "string", "format": "date-time", "example": "2024-06-01T12:00:00Z" }, "expiresAt": { "description": "Date and time of the QoS session expiration. Format must follow RFC 3339 and must indicate time zone (UTC or local).\n- When `qosStatus` is \"AVAILABLE\", it is the limit time when the session is scheduled to finnish, if not terminated by other means.\n- When `qosStatus` is \"UNAVAILABLE\", it is the time when the session was terminated.\n- Not to be returned when `qosStatus` is \"REQUESTED\".\nWhen the session is extended, the value is the new expiration time of the session.\n", "type": "string", "format": "date-time", "example": "2024-06-01T13:00:00Z" }, "qosStatus": { "$ref": "#/components/schemas/QosStatus-QoD-V1" }, "statusInfo": { "$ref": "#/components/schemas/StatusInfo-QoD-V1" }, "messages": { "type": "array", "items": { "$ref": "#/components/schemas/Message-QoD-V1" } } }, "required": [ "sessionId", "duration", "qosStatus" ] } ] }, "CreateSession-QoD-V1": { "description": "Attributes required to create a session", "allOf": [ { "$ref": "#/components/schemas/BaseSessionInfo-QoD-V1" }, { "type": "object", "properties": { "duration": { "description": "Session duration in seconds. Maximal value of 24 hours is used if not set.\nAfter session is expired the, client will receive a `QOS_STATUS_CHANGED` event with\n- `qosStatus` as `UNAVAILABLE`, and,\n- `statusInfo` as `DURATION_EXPIRED`.\nSee notification callback.\n", "type": "integer", "format": "int32", "minimum": 1, "maximum": 86400, "default": 86400, "example": 86400 } } } ] }, "Port-QoD-V1": { "description": "TCP or UDP port number", "type": "integer", "minimum": 0, "maximum": 65535 }, "ValidationError-QoD-V1": { "properties": { "loc": { "items": { "anyOf": [ { "type": "string" }, { "type": "integer" } ] }, "type": "array", "title": "Location" }, "msg": { "type": "string", "title": "Message" }, "type": { "type": "string", "title": "Error Type" } }, "type": "object", "required": [ "loc", "msg", "type" ], "title": "ValidationError" }, "HTTPValidationError-QoD-V1": { "properties": { "detail": { "items": { "$ref": "#/components/schemas/ValidationError-QoD-V1" }, "type": "array", "title": "Detail" } }, "type": "object", "title": "HTTPValidationError" }, "PortsSpec-QoD-V1": { "type": "object", "minProperties": 1, "properties": { "ranges": { "type": "array", "minItems": 1, "items": { "type": "object", "required": [ "from", "to" ], "properties": { "from": { "$ref": "#/components/schemas/Port-QoD-V1" }, "to": { "$ref": "#/components/schemas/Port-QoD-V1" } } } }, "ports": { "type": "array", "minItems": 1, "items": { "$ref": "#/components/schemas/Port-QoD-V1" } } }, "example": { "ranges": [ { "from": 5010, "to": 5020 } ], "ports": [ 5060, 5070 ] } }, "SinkCredential-QoD-V1": { "type": "object", "properties": { "credentialType": { "type": "string", "enum": [ "ACCESSTOKEN" ], "description": "The type of the credential.\nNote: Type of the credential - MUST be set to ACCESSTOKEN for now\n" } }, "discriminator": { "propertyName": "credentialType", "mapping": { "ACCESSTOKEN": "#/components/schemas/AccessTokenCredential" } }, "required": [ "credentialType" ] }, "AccessTokenCredential-QoD-V1": { "type": "object", "description": "An access token credential.", "allOf": [ { "$ref": "#/components/schemas/SinkCredential-QoD-V1" }, { "type": "object", "properties": { "accessToken": { "description": "REQUIRED. An access token is a previously acquired token granting access to the target resource.", "type": "string" }, "accessTokenExpiresUtc": { "type": "string", "format": "date-time", "description": "REQUIRED. An absolute (UTC) timestamp at which the token shall be considered expired. Token expiration should occur\nafter the termination of the requested session, allowing the client to be notified of any changes during the\nsessions's existence. If the token expires while the session is still active, the client will stop receiving notifications.\nIf the access token is a JWT and registered \"exp\" (Expiration Time) claim is present, the two expiry times should match.\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone.\nRecommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z)\n", "example": "2023-07-03T12:27:08.312Z" }, "accessTokenType": { "description": "REQUIRED. Type of the access token (See [OAuth 2.0](https://tools.ietf.org/html/rfc6749#section-7.1)). For the current version of the API the type MUST be set to `Bearer`.", "type": "string", "enum": [ "bearer" ] } }, "required": [ "accessToken", "accessTokenExpiresUtc", "accessTokenType" ] } ] }, "ExtendSessionDuration-QoD-V1": { "description": "Attributes required to extend the duration of an active session", "type": "object", "properties": { "requestedAdditionalDuration": { "description": "Additional duration in seconds to be extended.\n", "type": "integer", "format": "int32", "minimum": 1, "maximum": 86399, "example": 60 } }, "required": [ "requestedAdditionalDuration" ] }, "QosProfileName-QoD-V1": { "description": "A unique name for identifying a specific QoS profile.\nThis may follow different formats depending on the service providers implementation.\nSome options addresses:\n\n\n\n\n\n - A UUID style string\n - Support for predefined profiles QOS_S, QOS_M, QOS_L, and QOS_E\n - A searchable descriptive name\n", "type": "string", "example": "QCI_1_voice", "minLength": 3, "maxLength": 256, "format": "string", "pattern": "^[a-zA-Z0-9_.-]+$" }, "CloudEvent-QoD-V1": { "description": "Event compliant with the CloudEvents specification", "required": [ "id", "source", "specversion", "type", "time" ], "properties": { "id": { "description": "Identifier of this event, that must be unique in the source context.", "type": "string" }, "source": { "description": "Identifies the context in which an event happened in the specific Provider Implementation.", "type": "string", "format": "uri-reference" }, "type": { "description": "The type of the event.", "type": "string", "enum": [ "org.camaraproject.quality-on-demand.v1.qos-status-changed" ] }, "specversion": { "description": "Version of the specification to which this event conforms (must be 1.0 if it conforms to cloudevents 1.0.2 version)", "type": "string", "enum": [ "1.0" ] }, "datacontenttype": { "description": "media-type that describes the event payload encoding, must be \"application/json\" for CAMARA APIs", "type": "string", "enum": [ "application/json" ] }, "data": { "description": "Event notification details payload, which depends on the event type", "type": "object" }, "time": { "description": "Timestamp of when the occurrence happened. It must follow RFC 3339\n", "type": "string", "format": "date-time" } }, "discriminator": { "propertyName": "type", "mapping": { "org.camaraproject.quality-on-demand.v1.qos-status-changed": "#/components/schemas/EventQosStatusChanged" } } }, "EventQosStatusChanged-QoD-V1": { "allOf": [ { "$ref": "#/components/schemas/CloudEvent-QoD-V1" }, { "type": "object", "properties": { "data": { "type": "object", "description": "Event details depending on the event type", "required": [ "sessionId", "qosStatus" ], "properties": { "sessionId": { "$ref": "#/components/schemas/SessionId-QoD-V1" }, "qosStatus": { "$ref": "#/components/schemas/EventQosStatus-QoD-V1" }, "statusInfo": { "$ref": "#/components/schemas/StatusInfo-QoD-V1" } } } }, "required": [ "data" ] } ] }, "StatusInfo-QoD-V1": { "description": "Reason for the new `qosStatus`. Currently `statusInfo` is only applicable when `qosStatus` is 'UNAVAILABLE'.\n* `DURATION_EXPIRED` - Session terminated due to requested duration expired\n* `NETWORK_TERMINATED` - Network terminated the session before the requested duration expired\n* `DELETE_REQUESTED`- User requested the deletion of the session before the requested duration expired\n", "type": "string", "enum": [ "DURATION_EXPIRED", "NETWORK_TERMINATED", "DELETE_REQUESTED" ] }, "Device-QoD-V1": { "description": "End-user equipment able to connect to a network. Examples of devices include smartphones or IoT sensors/actuators.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n* `phoneNumber`\n* `networkAccessIdentifier`\n\nNOTE: 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\n", "type": "object", "properties": { "phoneNumber": { "$ref": "#/components/schemas/PhoneNumber-QoD-V1" }, "networkAccessIdentifier": { "$ref": "#/components/schemas/NetworkAccessIdentifier-QoD-V1" }, "ipv4Address": { "$ref": "#/components/schemas/DeviceIpv4Addr-QoD-V1" }, "ipv6Address": { "$ref": "#/components/schemas/DeviceIpv6Address-QoD-V1" } }, "minProperties": 1 }, "ApplicationServer-QoD-V1": { "description": "A server hosting backend applications to deliver some business logic to clients.\n\nThe developer can choose to provide the below specified device identifiers:\n\n* `ipv4Address`\n* `ipv6Address`\n", "type": "object", "properties": { "ipv4Address": { "$ref": "#/components/schemas/ApplicationServerIpv4Address-QoD-V1" }, "ipv6Address": { "$ref": "#/components/schemas/ApplicationServerIpv6Address-QoD-V1" } }, "minProperties": 1 }, "NetworkAccessIdentifier-QoD-V1": { "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" }, "PhoneNumber-QoD-V1": { "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": "^\\+?[0-9]{5,15}$", "example": "+123456789" }, "DeviceIpv4Addr-QoD-V1": { "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).\n\nIf 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.\n\nIf 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)\n\nIn 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.\n", "properties": { "publicAddress": { "$ref": "#/components/schemas/SingleIpv4Addr-QoD-V1" }, "privateAddress": { "$ref": "#/components/schemas/SingleIpv4Addr-QoD-V1" }, "publicPort": { "$ref": "#/components/schemas/Port-QoD-V1" } }, "anyOf": [ { "required": [ "publicAddress", "privateAddress" ] }, { "required": [ "publicAddress", "publicPort" ] } ], "example": { "publicAddress": "84.125.93.10", "publicPort": 59765 } }, "SingleIpv4Addr-QoD-V1": { "description": "A single IPv4 address with no subnet mask", "type": "string", "format": "ipv4", "example": "84.125.93.10" }, "DeviceIpv6Address-QoD-V1": { "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).\n\nThe session shall apply to all IP flows between the device subnet and the specified application server, unless further restricted by the optional parameters devicePorts or applicationServerPorts.\n", "type": "string", "format": "ipv6", "example": "2001:db8:85a3:8d3:1319:8a2e:370:7344" }, "ApplicationServerIpv4Address-QoD-V1": { "type": "string", "example": "192.168.0.1/24", "description": "IPv4 address may be specified in form
as:\n - address - an IPv4 number in dotted-quad form 1.2.3.4. Only this exact IP number will match the flow control rule.\n - address/mask - an IP number as above with a mask width of the form 1.2.3.4/24.\n In this case, all IP numbers from 1.2.3.0 to 1.2.3.255 will match. The bit width MUST be valid for the IP version.\n" }, "ApplicationServerIpv6Address-QoD-V1": { "type": "string", "example": "2001:db8:85a3:8d3:1319:8a2e:370:7344", "description": "IPv6 address may be specified in form
as:\n - address - The /128 subnet is optional for single addresses:\n - 2001:db8:85a3:8d3:1319:8a2e:370:7344\n - 2001:db8:85a3:8d3:1319:8a2e:370:7344/128\n - address/mask - an IP v6 number with a mask:\n - 2001:db8:85a3:8d3::0/64\n - 2001:db8:85a3:8d3::/64\n" }, "Message-QoD-V1": { "type": "object", "properties": { "severity": { "description": "Message severity", "type": "string", "enum": [ "INFO", "WARNING" ] }, "description": { "description": "Detailed message text", "type": "string" } }, "required": [ "severity", "description" ] }, "QosStatus-QoD-V1": { "description": "The current status of the requested QoS session. The status can be one of the following:\n* `REQUESTED` - QoS has been requested by creating a session\n* `AVAILABLE` - The requested QoS has been provided by the network\n* `UNAVAILABLE` - The requested QoS cannot be provided by the network due to some reason\n", "type": "string", "enum": [ "REQUESTED", "AVAILABLE", "UNAVAILABLE" ] }, "RetrieveSessionInput-QoD-V1": { "properties": { "device": { "$ref": "#/components/schemas/Device-QoD-V1" } }, "type": "object", "required": [ "device" ], "title": "RetrieveSessionInput" }, "RetrieveSessionsOutput-QoD-V1": { "description": "QoS session information for a given device", "type": "array", "items": { "$ref": "#/components/schemas/SessionInfo-QoD-V1" }, "minItems": 0 }, "EventQosStatus-QoD-V1": { "description": "The current status of a requested or previously available session. Applicable values in the event are:\n* `AVAILABLE` - The requested QoS has been provided by the network.\n* `UNAVAILABLE` - A requested or previously available QoS session is now unavailable. `statusInfo` may provide additional information about the reason for the unavailability.\n", "type": "string", "enum": [ "AVAILABLE", "UNAVAILABLE" ] }, "ErrorInfo-QoD-V1": { "type": "object", "properties": { "status": { "type": "integer", "description": "HTTP status code returned along with this error response" }, "code": { "type": "string", "description": "Code given to this error" }, "message": { "type": "string", "description": "Detailed error description" } }, "required": [ "status", "code", "message" ] }, "UnconditionalCallForwardingSignal-Cfs-V0": { "description": "resource containing the information about the Unconditional Call Forwarding Service for the given phone number (PhoneNumber)", "type": "object", "properties": { "active": { "type": "boolean", "description": "Indicates if the unconditional call forwarding service is active." } } }, "CallForwardingSignal-Cfs-V0": { "description": "resource containing the list of the Call Forwarding Services active for the given phone number (PhoneNumber). The possible states are, 'inactive' (no call forwarding service activated), 'unconditional' (call forwarded independently from the device status), 'conditional_busy' (call forwarded if the device is on an active call), 'conditional_not_reachable' (call forwarded if the device is not reachable), 'conditional_no_answer' (call forwarded if the device doesn't answer the incoming call).", "type": "array", "items": { "type": "string", "enum": [ "inactive", "unconditional", "conditional_busy", "conditional_not_reachable", "conditional_no_answer" ] }, "example": [ "unconditional", "conditional_busy", "conditional_no_answer" ], "minItems": 1 }, "CreateCallForwardingSignal-Cfs-V0": { "description": "resource containing the phone number (PhoneNumber) regarding which the Call Forwarding Service must be checked. To be valorised only in case of two-legged authentication. If valorised with three-legged authentication a 422-UNNECESSARY_IDENTIFIER error code is returned.", "type": "object", "properties": { "phoneNumber": { "$ref": "#/components/schemas/PhoneNumber-Cfs-V0" } } }, "PhoneNumber-Cfs-V0": { "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": "+99999991000" }, "ErrorInfo-Cfs-V0": { "description": "error info template", "type": "object", "required": [ "message", "status", "code" ], "properties": { "message": { "type": "string", "description": "A human readable description of what the event represent" }, "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "Friendly Code to describe the error" } } }, "XCorrelator-ConsentInfo-V0": { "description": "Value for the x-correlator", "type": "string", "pattern": "^[a-zA-Z0-9-_:;.\\/<>{}]{0,256}$", "example": "b4333c46-49c0-4f62-80d7-f0ef930f1c46" }, "PhoneNumber-ConsentInfo-V0": { "type": "string", "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 '+'.", "pattern": "^\\+[1-9][0-9]{4,14}$", "example": "+123456789" }, "RetrieveStatusRequestBody-ConsentInfo-V0": { "type": "object", "description": "The request body for the retrieve status request. It contains the requested scope(s), the Purpose for which the API Consumer intends to process the User's personal data, a flag indicating whether the API Consumer requests a Consent capture URL and optionally the phone number of the User. The phone number is required when the API is invoked using a two-legged access token, but MUST NOT be provided when a three-legged access token is used, as the subject will be uniquely identified from the access token.\n", "required": [ "scopes", "purpose", "requestCaptureUrl" ], "properties": { "phoneNumber": { "$ref": "#/components/schemas/PhoneNumber-ConsentInfo-V0" }, "scopes": { "$ref": "#/components/schemas/Scopes-ConsentInfo-V0" }, "purpose": { "$ref": "#/components/schemas/Purpose-ConsentInfo-V0" }, "requestCaptureUrl": { "type": "boolean", "description": "A boolean flag indicating whether the API Consumer requests API Provider to return a Consent capture URL.\n* `true` - If set to `true` the API will include a `captureUrl` in the response body if applicable.\n* `false` - The API will omit the Consent capture URL from the response.\n", "example": true } } }, "Scopes-ConsentInfo-V0": { "type": "array", "minItems": 1, "items": { "type": "string" }, "description": "List of requested scopes. The scope is a string that represents the access rights that the API Consumer is requesting from the User.\n", "example": [ "location-verification:verify" ] }, "Purpose-ConsentInfo-V0": { "type": "string", "pattern": "^dpv:[a-zA-Z0-9]+$", "description": "The reason for which personal data will be processed by the API Consumer. CAMARA defines a standard set of Purposes which can be used by API Consumers to specify the reason for their intended personal data processing. CAMARA uses the [W3C Data Privacy Vocabulary](https://w3c.github.io/dpv/2.0/dpv/) (DPV) to represent these purposes e.g. `dpv:FraudPreventionAndDetection` or `dpv:RequestedServiceProvision`.\n", "example": "dpv:FraudPreventionAndDetection" }, "RetrieveStatusResponseBody-ConsentInfo-V0": { "type": "object", "required": [ "statusInfo" ], "properties": { "statusInfo": { "$ref": "#/components/schemas/statusInfo-ConsentInfo-V0" }, "captureUrl": { "type": "string", "format": "url", "description": "URL where the User can provide the necessary Consent. This field is only present in the API response if the API Consumer requests it and if the following conditions are met:\n\n- `statusInfo[*].statusValidForProcessing` is `false`, and\n- `statusInfo[*].statusReason` is `PENDING`, `REQUESTED` or `EXPIRED`.\n\nPlease note that this field is only applicable when the User Consent is required to enable valid data processing. A unique URL is provided to authorise all items in the statusInfo list that require user action.\n", "example": "https://example.org/consent-capture-url" } } }, "statusInfo-ConsentInfo-V0": { "type": "array", "description": "Provides information about the validity status of the requested data processing for the specified scope(s) and Purpose. It contains details of whether the processing of the data is currently valid and, if not, the reason why. The expiration date of the validity may be also provided if applicable.\n\nMore than one array item may be required for the requested scope(s) and Purpose, e.g. when the requested scopes relate to multiple APIs.\n", "items": { "$ref": "#/components/schemas/statusInfoObject-ConsentInfo-V0" }, "minItems": 1 }, "statusInfoObject-ConsentInfo-V0": { "type": "object", "required": [ "scopes", "purpose", "statusValidForProcessing" ], "properties": { "scopes": { "$ref": "#/components/schemas/Scopes-ConsentInfo-V0" }, "purpose": { "$ref": "#/components/schemas/Purpose-ConsentInfo-V0" }, "statusValidForProcessing": { "type": "boolean", "description": "Boolean flag that shows the validity status of the requested data processing for the specified scope(s) and Purpose.\n* `true` - indicates that the current status is valid and permits the requested data processing.\n* `false` - indicates that the requested data processing is not permitted. The reason for this is provided in the `statusReason` field.\n" }, "statusReason": { "type": "string", "enum": [ "PENDING", "REQUESTED", "REVOKED", "EXPIRED", "OBJECTED" ], "description": "This field must be present if `statusValidForProcessing` is `false`. It indicates the reason why the requested data processing is not permitted for the specified scope(s) and Purpose. It provides API Consumers with additional context on the current validity status, helping them to understand its applicability and the next steps they may need to take.\n\nIt is particularly useful for determining whether the API Consumer should prompt the User to take action, such as providing Consent or renewing an existing Consent.\n\nPossible values are:\n\n- `PENDING`: The requested data processing has not yet been established or fully validated under the applicable privacy regulations.\n\n\n\n\n\n For example, the User has not yet provided Consent when it is required.\n- `REQUESTED`: The permission for the requested data processing has been submitted but has not yet been granted or confirmed.\n\n\n\n\n\n This is common when the API Consumer has initiated a request for Consent capture, but the User has not yet completed the process. For example, this occurs when a notice prompting the User to provide Consent has been displayed, but they have not yet made a decision.\n- `REVOKED`: The User has actively withdrawn their permission for the requested data processing after previously opting in.\n\n\n\n\n\n For example, the User revokes their Consent for the data processing.\n- `OBJECTED`: The user has opted out of the requested data processing, despite a previous explicit opt-in not being required.\n\n\n\n\n\n This is common when the User has exercised their right to object to data processing under the applicable privacy regulations.\n- `EXPIRED`: When applicable, the validity of the data processing has ceased due to the passage of time or a pre-defined condition.\n\n\n\n\n\n This is common for time-limited Consents.\n" }, "expirationDate": { "type": "string", "format": "date-time", "description": "The date and time at which the validity of the data processing is set to expire or has expired.\nIt applies mainly to time-limited Consents, or other cases where a specific duration of validity is defined for the data processing. This field is only applicable:\n\n- if `statusValidForProcessing` is `true` (indicating a future expiration), or\n- if `statusValidForProcessing` is `false` and `statusReason` is `EXPIRED` (indicating the past expiration date).\n\nIt must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone. Recommended format is yyyy-MM-dd'T'HH:mm:ss.SSSZ (i.e. which allows 2023-07-03T14:27:08.312+02:00 or 2023-07-03T12:27:08.312Z).\n", "example": "2023-07-03T14:27:08.312+02:00" } } }, "ErrorInfo-ConsentInfo-V0": { "type": "object", "required": [ "status", "code", "message" ], "properties": { "status": { "type": "integer", "description": "HTTP response status code" }, "code": { "type": "string", "description": "A human-readable code to describe the error" }, "message": { "type": "string", "description": "A human-readable description of what the event represents" } } }, "Accepted-Slice-V1": { "properties": { "status": { "type": "string", "maxLength": 20, "title": "Status", "default": "Accepted" } }, "type": "object", "title": "Accepted" }, "AreaOfService-Slice-V1": { "properties": { "polygon": { "items": { "$ref": "#/components/schemas/Point-Slice-V1" }, "type": "array", "minItems": 4, "title": "Polygon", "description": "Corners of the polygon defining the area that must be covered. The actual area may be larger, depending on cell areas." } }, "type": "object", "required": [ "polygon" ], "title": "AreaOfService" }, "CSMF_action-Slice-V1": { "type": "string", "enum": [ "add", "modify", "delete", "noChange" ], "title": "CSMF_action" }, "Customer-Slice-V1": { "properties": { "name": { "type": "string", "maxLength": 250, "title": "Name" }, "description": { "type": "string", "maxLength": 100, "nullable": true, "title": "Description", "description": "Description of the slice, e.g. \"B2B_5G_eMBB_Slice\"" }, "address": { "type": "string", "maxLength": 250, "nullable": true, "title": "Address", "description": "Address of the customer ordering slice creation." }, "contact": { "type": "string", "maxLength": 250, "nullable": true, "title": "Contact", "description": "Contact of the customer ordering slice creation." } }, "type": "object", "required": [ "name" ], "title": "Customer" }, "HTTPValidationError-Slice-V1": { "properties": { "detail": { "items": { "$ref": "#/components/schemas/ValidationError-Slice-V1" }, "type": "array", "title": "Detail" } }, "type": "object", "title": "HTTPValidationError" }, "IsolationLevel-Slice-V1": { "type": "string", "enum": [ "NO-ISOLATION", "PHYSICAL-ISOLATION", "LOGICAL-ISOLATION" ], "title": "IsolationLevel" }, "NetworkIdentifier-Slice-V1": { "properties": { "mcc": { "type": "string", "maxLength": 64, "minLength": 2, "pattern": "[0-9]{3}|[a-zA-Z]{2}|[A-Za-z]{3,64}", "title": "Mcc", "description": "Country name, short name, or MCC code. One cannot use country names if a country has several MCC codes, such as the US." }, "mnc": { "type": "string", "maxLength": 3, "minLength": 2, "pattern": "^[0-9]{2,3}$", "title": "Mnc" } }, "type": "object", "required": [ "mcc", "mnc" ], "title": "NetworkIdentifier" }, "Point-Slice-V1": { "properties": { "lat": { "type": "number", "maximum": 90, "minimum": -90, "title": "Latitude", "default": 0 }, "lon": { "type": "number", "maximum": 180, "minimum": -180, "title": "Longitude", "default": 0 } }, "type": "object", "title": "Point" }, "ServiceOrderClientNotif-Slice-V1": { "properties": { "resource": { "type": "string", "maxLength": 100, "title": "Resource", "description": "Resource ID/Slice name." }, "action": { "$ref": "#/components/schemas/CSMF_action-Slice-V1" }, "outcome": { "$ref": "#/components/schemas/ServiceOrderStateType-Slice-V1" }, "current_slice_state": { "$ref": "#/components/schemas/SliceState-Slice-V1" } }, "type": "object", "required": [ "resource", "action", "outcome", "current_slice_state" ], "title": "ServiceOrderClientNotif" }, "ServiceOrderStateType-Slice-V1": { "type": "string", "enum": [ "acknowledged", "rejected", "pending", "held", "inProgress", "cancelled", "completed", "failed", "partial", "assessingCancellation", "pendingCancellation" ], "title": "ServiceOrderStateType" }, "Slice-Input-Slice-V1": { "properties": { "name": { "type": "string", "maxLength": 64, "minLength": 5, "pattern": "^[a-zA-Z0-9][a-zA-Z0-9-]{3,63}[a-zA-Z0-9]$", "nullable": true, "title": "Name", "description": "Optional short name for the slice. Must be ASCII characters, digits and dash. Like name of an event.", "example": "Concert-2029-Big-Arena" }, "notificationUrl": { "type": "string", "maxLength": 255, "title": "Notificationurl", "description": "Contact attached to the order to send back information regarding this order." }, "notificationAuthToken": { "type": "string", "maxLength": 4096, "nullable": true, "title": "Notificationauthtoken", "description": "Authorization token for notification sending." }, "networkIdentifier": { "$ref": "#/components/schemas/NetworkIdentifier-Slice-V1" }, "sliceInfo": { "$ref": "#/components/schemas/SliceInfo-Slice-V1" }, "areaOfService": { "allOf": [ { "$ref": "#/components/schemas/AreaOfService-Slice-V1" } ], "nullable": true, "description": "Specifies the area where the slice can be used" }, "maxDataConnections": { "type": "integer", "maximum": 1000000, "minimum": 0, "format": "int32", "nullable": true, "title": "Maxdataconnections", "description": "Maximum number of data connection sessions in the slice." }, "maxDevices": { "type": "integer", "maximum": 1000, "minimum": 0, "format": "int32", "nullable": true, "title": "Maxdevices", "description": "Maximum number of devices using the slice." }, "delayTolerance": { "type": "string", "maxLength": 20, "nullable": true, "title": "Delaytolerance", "description": "Delaytolerance attribute, True/False or SUPPORTED/NOT SUPPORTED" }, "servicePriority": { "type": "integer", "maximum": 100, "minimum": 0, "format": "int32", "nullable": true, "title": "Servicepriority", "description": "ServicePriority attribute" }, "sliceDownlinkThroughput": { "allOf": [ { "$ref": "#/components/schemas/Throughput-Slice-V1" } ], "nullable": true, "description": "Data rate parameters (max/guaranteed) supported by the network slice for all devices together in downlink" }, "sliceUplinkThroughput": { "allOf": [ { "$ref": "#/components/schemas/Throughput-Slice-V1" } ], "nullable": true, "description": "Data rate parameters (max/guaranteed) supported by the network slice for all devices together in uplink" }, "deviceDownlinkThroughput": { "allOf": [ { "$ref": "#/components/schemas/Throughput-Slice-V1" } ], "nullable": true, "description": "Data rate parameters (max/guaranteed) supported by the network slice per device in downlink" }, "deviceUplinkThroughput": { "allOf": [ { "$ref": "#/components/schemas/Throughput-Slice-V1" } ], "nullable": true, "description": "Data rate parameters (max/guaranteed) supported by the network slice per device in uplink" }, "isolationLevel": { "allOf": [ { "$ref": "#/components/schemas/IsolationLevel-Slice-V1" } ], "nullable": true, "description": "Parameter describing the isolation type" }, "qos": { "type": "string", "maxLength": 20, "nullable": true, "title": "Qos", "description": "QoS Identifier" }, "udm5Qi": { "type": "string", "maxLength": 20, "nullable": true, "title": "Udm5Qi", "description": "5G QoS Identifier" }, "customer": { "allOf": [ { "$ref": "#/components/schemas/Customer-Slice-V1" } ], "nullable": true, "description": "Customer created the slice" } }, "type": "object", "required": [ "notificationUrl", "networkIdentifier", "sliceInfo" ], "title": "Slice" }, "Slice-Output-Slice-V1": { "properties": { "name": { "type": "string", "maxLength": 64, "minLength": 5, "pattern": "^[a-zA-Z0-9][a-zA-Z0-9-]{3,63}[a-zA-Z0-9]$", "nullable": true, "title": "Name", "description": "Optional short name for the slice. Must be ASCII characters, digits and dash. Like name of an event.", "example": "Concert-2029-Big-Arena" }, "notificationUrl": { "type": "string", "maxLength": 255, "title": "Notificationurl", "description": "Contact attached to the order to send back information regarding this order." }, "notificationAuthToken": { "type": "string", "maxLength": 4096, "nullable": true, "title": "Notificationauthtoken", "description": "Authorization token for notification sending." }, "networkIdentifier": { "$ref": "#/components/schemas/NetworkIdentifier-Slice-V1" }, "sliceInfo": { "$ref": "#/components/schemas/SliceInfo-Slice-V1" }, "areaOfService": { "allOf": [ { "$ref": "#/components/schemas/AreaOfService-Slice-V1" } ], "nullable": true, "description": "Specifies the area where the slice can be used" }, "maxDataConnections": { "type": "integer", "maximum": 1000000, "minimum": 0, "format": "int32", "nullable": true, "title": "Maxdataconnections", "description": "Maximum number of data connection sessions in the slice." }, "maxDevices": { "type": "integer", "maximum": 1000, "minimum": 0, "format": "int32", "nullable": true, "title": "Maxdevices", "description": "Maximum number of devices using the slice." }, "delayTolerance": { "type": "string", "maxLength": 20, "nullable": true, "title": "Delaytolerance", "description": "Delaytolerance attribute, True/False or SUPPORTED/NOT SUPPORTED" }, "servicePriority": { "type": "integer", "maximum": 100, "minimum": 0, "format": "int32", "nullable": true, "title": "Servicepriority", "description": "ServicePriority attribute" }, "sliceDownlinkThroughput": { "allOf": [ { "$ref": "#/components/schemas/Throughput-Slice-V1" } ], "nullable": true, "description": "Data rate parameters (max/guaranteed) supported by the network slice for all devices together in downlink" }, "sliceUplinkThroughput": { "allOf": [ { "$ref": "#/components/schemas/Throughput-Slice-V1" } ], "nullable": true, "description": "Data rate parameters (max/guaranteed) supported by the network slice for all devices together in uplink" }, "deviceDownlinkThroughput": { "allOf": [ { "$ref": "#/components/schemas/Throughput-Slice-V1" } ], "nullable": true, "description": "Data rate parameters (max/guaranteed) supported by the network slice per device in downlink" }, "deviceUplinkThroughput": { "allOf": [ { "$ref": "#/components/schemas/Throughput-Slice-V1" } ], "nullable": true, "description": "Data rate parameters (max/guaranteed) supported by the network slice per device in uplink" }, "isolationLevel": { "allOf": [ { "$ref": "#/components/schemas/IsolationLevel-Slice-V1" } ], "nullable": true, "description": "Parameter describing the isolation type" }, "qos": { "type": "string", "maxLength": 20, "nullable": true, "title": "Qos", "description": "QoS Identifier" }, "udm5Qi": { "type": "string", "maxLength": 20, "nullable": true, "title": "Udm5Qi", "description": "5G QoS Identifier" }, "customer": { "allOf": [ { "$ref": "#/components/schemas/Customer-Slice-V1" } ], "nullable": true, "description": "Customer created the slice" } }, "type": "object", "required": [ "notificationUrl", "networkIdentifier", "sliceInfo" ], "title": "Slice" }, "SliceData-Slice-V1": { "properties": { "slice": { "$ref": "#/components/schemas/Slice-Output-Slice-V1" }, "csi_id": { "type": "string", "nullable": true, "title": "Csi Id", "description": "Communications Service Instance identifier." }, "name": { "type": "string", "title": "Name", "description": "Name/resource identifier of the network slice." }, "state": { "$ref": "#/components/schemas/SliceState-Slice-V1" }, "provisioner": { "type": "string", "maxLength": 50, "title": "Provisioner", "description": "The organization provisioning the slice" } }, "type": "object", "required": [ "slice", "name", "state", "provisioner" ], "title": "SliceData" }, "SliceInfo-Slice-V1": { "properties": { "serviceType": { "type": "integer", "format": "int32", "title": "Servicetype", "description": "Name or ID of slice type (e.g. eMBB, URLLC, MIoT or numeric SST)." }, "differentiator": { "type": "string", "maxLength": 25, "pattern": "^[A-Fa-f0-9]{1,6}$", "nullable": true, "title": "Differentiator", "description": "Differentiator identifies the slice within the type." } }, "type": "object", "required": [ "serviceType" ], "title": "SliceInfo" }, "SliceState-Slice-V1": { "type": "string", "enum": [ "PENDING", "AVAILABLE", "OPERATING", "DELETED", "FAILED" ], "title": "SliceState" }, "SliceTypeName-Slice-V1": { "type": "string", "enum": [ "eMBB", "URLLC", "MIoT" ], "title": "SliceTypeName" }, "Throughput-Slice-V1": { "properties": { "guaranteed": { "type": "number", "nullable": true, "title": "Guaranteed", "description": "Guaranteed throughput in kbps." }, "maximum": { "type": "number", "nullable": true, "title": "Maximum", "description": "Maximum throughput in kbps." } }, "type": "object", "title": "Throughput" }, "ValidationError-Slice-V1": { "properties": { "loc": { "type": "array", "items": { "type": "string" }, "title": "Location" }, "msg": { "type": "string", "title": "Message" }, "type": { "type": "string", "title": "Error Type" } }, "type": "object", "required": [ "loc", "msg", "type" ], "title": "ValidationError" }, "Apps-SliceAttach-V1": { "properties": { "os": { "type": "string", "maxLength": 100, "title": "Os", "description": "Operating system identifier, UUID", "example": "09078034-07db-4b13-a970-ab80235f7369" }, "apps": { "items": { "type": "string", "maxLength": 50 }, "type": "array", "title": "Apps", "description": "List of application identifiers" } }, "type": "object", "required": [ "os", "apps" ], "title": "Apps" }, "AttachInfo-Input-SliceAttach-V1": { "properties": { "nac_resource_id": { "type": "string", "maxLength": 100, "title": "Nac Resource Id", "description": "Resource identifier of the attachment data." }, "resource": { "$ref": "#/components/schemas/AttachResource-Input-SliceAttach-V1" }, "deviceStatus": { "allOf": [ { "$ref": "#/components/schemas/AttachStatus-SliceAttach-V1" } ], "nullable": true, "description": "Status of the device in relation to the given slice e.g. ATTACHED or DETACHED." }, "deviceAttachState": { "allOf": [ { "$ref": "#/components/schemas/OrderState-SliceAttach-V1" } ], "nullable": true, "description": "Progress/state of the device attach order, e.g. Completed, Accepted, Rejected." }, "applicationAttachSuccessful": { "type": "boolean", "nullable": true, "title": "Applicationattachsuccessful", "description": "Denotes whether successful application attach subscription was subsequently sent." } }, "type": "object", "required": [ "nac_resource_id", "resource" ], "title": "AttachInfo" }, "AttachInfo-Output-SliceAttach-V1": { "properties": { "nac_resource_id": { "type": "string", "maxLength": 100, "title": "Nac Resource Id", "description": "Resource identifier of the attachment data." }, "resource": { "$ref": "#/components/schemas/AttachResource-Output-SliceAttach-V1" }, "deviceStatus": { "allOf": [ { "$ref": "#/components/schemas/AttachStatus-SliceAttach-V1" } ], "nullable": true, "description": "Status of the device in relation to the given slice e.g. ATTACHED or DETACHED." }, "deviceAttachState": { "allOf": [ { "$ref": "#/components/schemas/OrderState-SliceAttach-V1" } ], "nullable": true, "description": "Progress/state of the device attach order, e.g. Completed, Accepted, Rejected." }, "applicationAttachSuccessful": { "type": "boolean", "nullable": true, "title": "Applicationattachsuccessful", "description": "Denotes whether successful application attach subscription was subsequently sent." } }, "type": "object", "required": [ "nac_resource_id", "resource" ], "title": "AttachInfo" }, "AttachResource-Input-SliceAttach-V1": { "properties": { "device": { "$ref": "#/components/schemas/MobileSubscribersDevice-SliceAttach-V1" }, "customer": { "allOf": [ { "$ref": "#/components/schemas/Customer-SliceAttach-V1" } ], "nullable": true, "description": "Customer who orders the device attach operations." }, "sliceId": { "type": "string", "maxLength": 64, "minLength": 5, "pattern": "^[a-zA-Z0-9][a-zA-Z0-9-]{3,63}[a-zA-Z0-9]$", "title": "Sliceid", "description": "Slice resource identifier, simple name or UUID." }, "mobile_services": { "items": { "type": "string" }, "type": "array", "maxItems": 10, "title": "Mobile Services", "description": "List of services allowed for the device.", "default": [ "Voice", "Voicemail", "5G-Data" ] }, "traffic_categories": { "allOf": [ { "$ref": "#/components/schemas/TrafficCategories-SliceAttach-V1" } ], "nullable": true, "description": "Denotes the operating system id and the applications' identifiers" }, "webhook": { "allOf": [ { "$ref": "#/components/schemas/Webhook-SliceAttach-V1" } ], "nullable": true, "description": "Callback settings for the requester application." } }, "type": "object", "required": [ "device", "sliceId" ], "title": "AttachResource" }, "AttachResource-Output-SliceAttach-V1": { "properties": { "device": { "$ref": "#/components/schemas/MobileSubscribersDevice-SliceAttach-V1" }, "customer": { "allOf": [ { "$ref": "#/components/schemas/Customer-SliceAttach-V1" } ], "nullable": true, "description": "Customer who orders the device attach operations." }, "sliceId": { "type": "string", "maxLength": 64, "minLength": 5, "pattern": "^[a-zA-Z0-9][a-zA-Z0-9-]{3,63}[a-zA-Z0-9]$", "title": "Sliceid", "description": "Slice resource identifier, simple name or UUID." }, "mobile_services": { "items": { "type": "string" }, "type": "array", "maxItems": 10, "title": "Mobile Services", "description": "List of services allowed for the device.", "default": [ "Voice", "Voicemail", "5G-Data" ] }, "traffic_categories": { "allOf": [ { "$ref": "#/components/schemas/TrafficCategories-SliceAttach-V1" } ], "nullable": true, "description": "Denotes the operating system id and the applications' identifiers" }, "webhook": { "allOf": [ { "$ref": "#/components/schemas/Webhook-SliceAttach-V1" } ], "nullable": true, "description": "Callback settings for the requester application." } }, "type": "object", "required": [ "device", "sliceId" ], "title": "AttachResource" }, "AttachStatus-SliceAttach-V1": { "type": "string", "enum": [ "ATTACHED", "DETACHED" ], "title": "AttachStatus" }, "Customer-SliceAttach-V1": { "properties": { "name": { "type": "string", "maxLength": 250, "title": "Name" }, "description": { "type": "string", "maxLength": 100, "nullable": true, "title": "Description", "description": "Description of the slice, e.g. \"B2B_5G_eMBB_Slice\"" }, "address": { "type": "string", "maxLength": 250, "nullable": true, "title": "Address", "description": "Address of the customer ordering slice creation." }, "contact": { "type": "string", "maxLength": 250, "nullable": true, "title": "Contact", "description": "Contact of the customer ordering slice creation." } }, "type": "object", "required": [ "name" ], "title": "Customer" }, "DeviceIpv4Addr-SliceAttach-V1": { "properties": { "publicAddress": { "type": "string", "maxLength": 15, "nullable": true, "title": "Publicaddress", "description": "Public IPv4 address of the device. Either of the device or the NAT the device is behind." }, "privateAddress": { "type": "string", "maxLength": 15, "nullable": true, "title": "Privateaddress", "description": "Private IPv4 address of the device, if it is behind a NAT." }, "publicPort": { "type": "integer", "maximum": 65535, "minimum": 0, "format": "int32", "nullable": true, "title": "Publicport", "description": "Public port used by the device. Port is necessary, as private address ranges overlap, and public port is used to extend the range for CGNAT." } }, "type": "object", "title": "DeviceIpv4Addr" }, "HTTPValidationError-SliceAttach-V1": { "properties": { "detail": { "items": { "$ref": "#/components/schemas/ValidationError-SliceAttach-V1" }, "type": "array", "title": "Detail" } }, "type": "object", "title": "HTTPValidationError" }, "MobileSubscribersDevice-SliceAttach-V1": { "properties": { "phoneNumber": { "type": "string", "maxLength": 16, "pattern": "^\\+[1-9][0-9]{4,14}$", "nullable": true, "title": "Phonenumber", "description": "Phone number of the subscription, if any. Optional." }, "networkAccessIdentifier": { "type": "string", "maxLength": 256, "pattern": "^\\S+@\\S+\\.\\S+$", "nullable": true, "title": "Networkaccessidentifier", "description": "Email address-like external identifier of the subscription registered at the operator. If both networkAccessIdentifier and phoneNumber are included, phoneNumber may be dropped and networkAccessIdentifier may be retained." }, "ipv4Address": { "allOf": [ { "$ref": "#/components/schemas/DeviceIpv4Addr-SliceAttach-V1" } ], "nullable": true, "description": "IPv4 address of the device. IP address is needed for some flow-oriented services, such as QoD." }, "ipv6Address": { "type": "string", "maxLength": 45, "nullable": true, "title": "Ipv6Address", "description": "IPv6 address of the device. IP address is needed for some flow-oriented services, such as QoD." }, "imsi": { "type": "integer", "nullable": true, "title": "Imsi", "description": "International mobile subscriber identity" } }, "type": "object", "title": "MobileSubscribersDevice" }, "OrderState-SliceAttach-V1": { "type": "string", "enum": [ "Completed", "Accepted", "Rejected", "Acknowledged" ], "title": "OrderState" }, "TrafficCategories-SliceAttach-V1": { "properties": { "apps": { "$ref": "#/components/schemas/Apps-SliceAttach-V1" } }, "type": "object", "required": [ "apps" ], "title": "TrafficCategories" }, "ValidationError-SliceAttach-V1": { "properties": { "loc": { "type": "array", "items": { "type": "string" }, "title": "Location" }, "msg": { "type": "string", "title": "Message" }, "type": { "type": "string", "title": "Error Type" } }, "type": "object", "required": [ "loc", "msg", "type" ], "title": "ValidationError" }, "Webhook-SliceAttach-V1": { "properties": { "notificationUrl": { "type": "string", "maxLength": 256, "title": "Notificationurl", "description": "Notification URL for session-related events.", "example": "https://application-server.com" }, "notificationAuthToken": { "type": "string", "maxLength": 4096, "nullable": true, "title": "Notificationauthtoken", "description": "Authorization token for notification sending.", "example": "c8974e592c2fa383d4a3960714" } }, "type": "object", "required": [ "notificationUrl" ], "title": "Webhook" }, "AnalyticsEvent-ConI-V1": { "type": "string", "enum": [ "CONGESTION" ], "title": "AnalyticsEvent" }, "AnalyticsEventNotif-ConI-V1": { "properties": { "analyEvent": { "$ref": "#/components/schemas/AnalyticsEvent-ConI-V1" }, "timeStamp": { "type": "string", "format": "date-time", "title": "Timestamp" }, "congestInfos": { "type": "array", "items": { "$ref": "#/components/schemas/CongestInfo-ConI-V1" }, "nullable": true, "title": "Congestinfos" } }, "type": "object", "required": [ "analyEvent", "timeStamp" ], "title": "AnalyticsEventNotif" }, "AnalyticsEventNotification-ConI-V1": { "properties": { "notifId": { "type": "string", "maxLength": 100, "title": "Notifid" }, "analyEventNotifs": { "items": { "$ref": "#/components/schemas/AnalyticsEventNotif-ConI-V1" }, "type": "array", "title": "Analyeventnotifs" } }, "type": "object", "required": [ "notifId", "analyEventNotifs" ], "title": "AnalyticsEventNotification" }, "CongestInfo-ConI-V1": { "properties": { "cngAnas": { "items": { "$ref": "#/components/schemas/CongestionAnalytics-ConI-V1" }, "type": "array", "title": "Cnganas" } }, "type": "object", "required": [ "cngAnas" ], "title": "CongestInfo" }, "CongestionAnalytics-ConI-V1": { "properties": { "cngType": { "type": "string", "maxLength": 50, "title": "Cngtype" }, "tmWdw": { "$ref": "#/components/schemas/TimeAndDate-ConI-V1" }, "nsi": { "$ref": "#/components/schemas/ThresholdLevel-ConI-V1" }, "confidence": { "type": "integer", "maximum": 100, "minimum": 0, "format": "int32", "nullable": true, "title": "Confidence" } }, "type": "object", "required": [ "cngType", "tmWdw", "nsi" ], "title": "CongestionAnalytics" }, "CongestionData-ConI-V1": { "properties": { "timeIntervalStart": { "type": "string", "format": "date-time", "title": "Timeintervalstart" }, "timeIntervalStop": { "type": "string", "format": "date-time", "title": "Timeintervalstop" }, "congestionLevel": { "$ref": "#/components/schemas/CongestionLevel-ConI-V1" }, "confidenceLevel": { "type": "integer", "maximum": 100, "minimum": 0, "format": "int32", "nullable": true, "title": "Confidencelevel" } }, "type": "object", "required": [ "timeIntervalStart", "timeIntervalStop", "congestionLevel" ], "title": "CongestionData" }, "CongestionLevel-ConI-V1": { "type": "string", "enum": [ "Low", "Medium", "High" ], "title": "CongestionLevel" }, "CongestionLevelDeprecated-ConI-V1": { "type": "string", "enum": [ "none", "low", "medium", "high" ], "title": "CongestionLevelDeprecated" }, "CongestionStatusDeprecated-ConI-V1": { "properties": { "level": { "$ref": "#/components/schemas/CongestionLevelDeprecated-ConI-V1" } }, "type": "object", "required": [ "level" ], "title": "CongestionStatusDeprecated" }, "Device-ConI-V1": { "properties": { "phoneNumber": { "type": "string", "maxLength": 16, "pattern": "^\\+[1-9][0-9]{4,14}$", "nullable": true, "title": "Phonenumber", "description": "Phone number of the subscription, if any. Optional." }, "networkAccessIdentifier": { "type": "string", "maxLength": 256, "pattern": "^\\S+@\\S+\\.\\S+$", "nullable": true, "title": "Networkaccessidentifier", "description": "Email address-like external identifier of the subscription registered at the operator. If both networkAccessIdentifier and phoneNumber are included, phoneNumber may be dropped and networkAccessIdentifier may be retained." }, "ipv4Address": { "allOf": [ { "$ref": "#/components/schemas/DeviceIpv4Addr-ConI-V1" } ], "nullable": true, "description": "IPv4 address of the device. IP address is needed for some flow-oriented services, such as QoD." }, "ipv6Address": { "type": "string", "maxLength": 45, "nullable": true, "title": "Ipv6Address", "description": "IPv6 address of the device. IP address is needed for some flow-oriented services, such as QoD." } }, "type": "object", "title": "Device" }, "DeviceIpv4Addr-ConI-V1": { "properties": { "publicAddress": { "type": "string", "maxLength": 15, "nullable": true, "title": "Publicaddress", "description": "Public IPv4 address of the device. Either of the device or the NAT the device is behind." }, "privateAddress": { "type": "string", "maxLength": 15, "nullable": true, "title": "Privateaddress", "description": "Private IPv4 address of the device, if it is behind a NAT." }, "publicPort": { "type": "integer", "maximum": 65535, "minimum": 0, "format": "int32", "nullable": true, "title": "Publicport", "description": "Public port used by the device. Port is necessary, as private address ranges overlap, and public port is used to extend the range for CGNAT." } }, "type": "object", "title": "DeviceIpv4Addr" }, "FetchCongestion-ConI-V1": { "properties": { "device": { "$ref": "#/components/schemas/Device-ConI-V1" }, "start": { "type": "string", "format": "date-time", "nullable": true, "title": "Start", "description": "Start of the period queried. If not set, 15 minutes before end. If neither start or end is set, then the upcoming 15 minutes are predicted." }, "end": { "type": "string", "format": "date-time", "nullable": true, "title": "End", "description": "End of the period queried. If not set, 15 minutes after start." } }, "type": "object", "required": [ "device" ], "title": "FetchCongestion" }, "HTTPValidationError-ConI-V1": { "properties": { "detail": { "items": { "$ref": "#/components/schemas/ValidationError-ConI-V1" }, "type": "array", "title": "Detail" } }, "type": "object", "title": "HTTPValidationError" }, "SubscribeCongestionCreate-ConI-V1": { "properties": { "device": { "$ref": "#/components/schemas/Device-ConI-V1" }, "webhook": { "$ref": "#/components/schemas/Webhook-ConI-V1" }, "subscriptionExpireTime": { "type": "string", "format": "date-time", "title": "Subscriptionexpiretime", "description": "Time when the subscription expires." } }, "type": "object", "required": [ "device", "webhook", "subscriptionExpireTime" ], "title": "SubscribeCongestionCreate" }, "SubscriptionInfo-ConI-V1": { "properties": { "device": { "$ref": "#/components/schemas/Device-ConI-V1" }, "webhook": { "$ref": "#/components/schemas/Webhook-ConI-V1" }, "subscriptionExpireTime": { "type": "string", "format": "date-time", "title": "Subscriptionexpiretime", "description": "Time when the subscription expires." }, "subscriptionId": { "type": "string", "title": "Subscriptionid" }, "startedAt": { "type": "string", "format": "date-time", "nullable": true, "title": "Startedat", "description": "Time when subscription started" }, "expiresAt": { "type": "string", "format": "date-time", "nullable": true, "title": "Expiresat", "description": "Time when subscription will expire or expired" } }, "type": "object", "required": [ "device", "webhook", "subscriptionExpireTime", "subscriptionId" ], "title": "SubscriptionInfo" }, "ThresholdLevel-ConI-V1": { "properties": { "congLevel": { "type": "integer", "maximum": 100, "minimum": 0, "format": "int32", "title": "Conglevel" } }, "type": "object", "required": [ "congLevel" ], "title": "ThresholdLevel" }, "TimeAndDate-ConI-V1": { "properties": { "startTime": { "type": "string", "format": "date-time", "title": "Starttime" }, "stopTime": { "type": "string", "format": "date-time", "title": "Stoptime" } }, "type": "object", "required": [ "startTime", "stopTime" ], "title": "TimeAndDate" }, "ValidationError-ConI-V1": { "properties": { "loc": { "type": "array", "items": { "type": "string" }, "title": "Location" }, "msg": { "type": "string", "title": "Message" }, "type": { "type": "string", "title": "Error Type" } }, "type": "object", "required": [ "loc", "msg", "type" ], "title": "ValidationError" }, "Webhook-ConI-V1": { "properties": { "notificationUrl": { "type": "string", "maxLength": 256, "title": "Notificationurl", "description": "Notification URL for session-related events.", "example": "https://application-server.com" }, "notificationAuthToken": { "type": "string", "maxLength": 4096, "nullable": true, "title": "Notificationauthtoken", "description": "Authorization token for notification sending.", "example": "c8974e592c2fa383d4a3960714" } }, "type": "object", "required": [ "notificationUrl" ], "title": "Webhook" }, "ClientCredential-Auth-V1": { "properties": { "client_id": { "type": "string", "maxLength": 50, "title": "Client Id", "description": "The unique client_id string as issued by the authorization server." }, "client_secret": { "type": "string", "maxLength": 50, "title": "Client Secret", "description": "The client_secret corresponding to the client_id." } }, "type": "object", "required": [ "client_id", "client_secret" ], "title": "ClientCredential" }, "HTTPValidationError-Auth-V1": { "properties": { "detail": { "items": { "$ref": "#/components/schemas/ValidationError-Auth-V1" }, "type": "array", "title": "Detail" } }, "type": "object", "title": "HTTPValidationError" }, "ValidationError-Auth-V1": { "properties": { "loc": { "type": "array", "items": { "type": "string" }, "title": "Location" }, "msg": { "type": "string", "title": "Message" }, "type": { "type": "string", "title": "Error Type" } }, "type": "object", "required": [ "loc", "msg", "type" ], "title": "ValidationError" }, "Metadata-WellKnown-V0": { "properties": { "authorization_endpoint": { "type": "string", "maxLength": 255, "title": "Authorization Endpoint" }, "token_endpoint": { "type": "string", "maxLength": 255, "title": "Token Endpoint" }, "fast_flow_csp_auth_endpoint": { "type": "string", "maxLength": 255, "title": "Fast Flow Csp Auth Endpoint" } }, "type": "object", "required": [ "authorization_endpoint", "token_endpoint", "fast_flow_csp_auth_endpoint" ], "title": "Metadata" } }, "securitySchemes": { "ApiKeyAuth": { "type": "apiKey", "in": "header", "name": "x-rapidapi-key", "description": "Your RapidAPI key" } }, "parameters": { "x-rapidapi-host": { "name": "x-rapidapi-host", "in": "header", "required": true, "description": "The API's Host value as defined in the RapidAPI Hub.", "schema": { "type": "string", "example": "network-as-code.p-eu.rapidapi.com" } } } }, "security": [ { "ApiKeyAuth": [] } ] }