diff --git a/code/API_definitions/webrtc-call-handling.yaml b/code/API_definitions/webrtc-call-handling.yaml index 2f61e1d..9a2a7a4 100644 --- a/code/API_definitions/webrtc-call-handling.yaml +++ b/code/API_definitions/webrtc-call-handling.yaml @@ -61,7 +61,7 @@ info: - **SDP**: Acronym for Session Description Protocol. The SDP is a format for describing multimedia communication sessions for the purposes of announcement and invitation. - - **WrtcSDPDescriptor**: Schema to include inside a JSON, a SDP body. You can + - **WrtcSdpDescriptor**: Schema to include inside a JSON, a SDP body. You can obtain an SDP for WebRTC calling using the WebRTC API provided by the browser or any other media library. @@ -457,6 +457,7 @@ components: securitySchemes: openId: type: openIdConnect + description: OpenID Connect authentication via discovery metadata. openIdConnectUrl: https://example.com/.well-known/openid-configuration headers: x-correlator: @@ -473,6 +474,7 @@ components: explode: false schema: type: string + maxLength: 256 pathParamMediaSessionId: name: mediaSessionId in: path @@ -482,6 +484,7 @@ components: explode: false schema: type: string + maxLength: 256 x-correlator: name: x-correlator in: header @@ -490,32 +493,38 @@ components: $ref: "#/components/schemas/XCorrelator" schemas: XCorrelator: + description: Correlator string, UUID format recommended but any string matching the pattern can be used type: string pattern: ^[a-zA-Z0-9-_:;.\/<>{}]{0,256}$ + maxLength: 256 example: "b4333c46-49c0-4f62-80d7-f0ef930f1c46" MediaSessionInformation: + description: Information about a WebRTC media session including originator and receiver identities, SDP offer/answer, and call status type: object properties: originatorAddress: $ref: '#/components/schemas/Address' originatorName: type: string + maxLength: 256 description: Friendly name of the call originator example: 'Alice' receiverAddress: $ref: '#/components/schemas/Address' receiverName: type: string + maxLength: 256 description: Friendly name of the call terminator example: 'Bob' status: $ref: '#/components/schemas/SessionStatus' offer: - $ref: '#/components/schemas/WrtcSDPDescriptor' + $ref: '#/components/schemas/WrtcSdpDescriptor' answer: - $ref: '#/components/schemas/WrtcSDPDescriptor' + $ref: '#/components/schemas/WrtcSdpDescriptor' mediaSessionId: type: string + maxLength: 256 description: >- The media session ID created by the network. The mediaSessionId shall not be included in POST requests by the client, but must be included in the notifications @@ -535,7 +544,7 @@ components: guarantee of any particular server-side action or behavior. allOf: - $ref: '#/components/schemas/LocationDetails' - WrtcSDPDescriptor: + WrtcSdpDescriptor: type: object description: |- **OFFER**: An inlined session description in SDP format [RFC4566].If XML syntax @@ -550,6 +559,7 @@ components: properties: sdp: type: string + maxLength: 65536 description: |- An inlined session description in SDP format [RFC4566].If XML syntax is used, the content of this element SHALL be embedded in a CDATA section SessionStatus: @@ -573,6 +583,7 @@ components: - Busy example: Ringing ErrorInfo: + description: A structured error response providing details about a failed request, including the HTTP status code, an error code, and a human-readable message type: object required: - status @@ -581,17 +592,23 @@ components: properties: status: type: integer + format: int32 + minimum: 100 + maximum: 599 description: HTTP response status code code: type: string + maxLength: 96 description: Friendly Code to describe the error message: type: string + maxLength: 512 description: A human readable description of what the event represent Address: type: string description: Subscriber address (Sender or Receiver) pattern: '^(tel:\+[0-9]{5,15}|sip:[A-Za-z0-9_.!%+\-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}|urn:service:sos(?:\.[a-z0-9](?:[a-z0-9\-]{0,30}[a-z0-9])?)*)$' + maxLength: 256 example: 'tel:+11234567899' LocationDetails: type: object @@ -647,11 +664,13 @@ components: timestamp: type: string format: date-time + maxLength: 64 description: The timestamp (in ISO 8601 format) indicating when the location information was Calculated. \nThis is crucial for emergency services to assess the timeliness of the data. if not provided current timestamp will be used by default" CircleCoordinates: + description: Geographic coordinates defining a circular area by center point and radius type: object required: - latitude @@ -671,6 +690,7 @@ components: format: float description: Radius of the circle in meters, indicating the uncertainty. EllipsoidCoordinates: + description: Geographic coordinates defining an ellipsoidal uncertainty area in the WGS84 geocentric coordinate system type: object required: - latitude @@ -708,6 +728,7 @@ components: examples: exampleRegularMediaSessionRequest: summary: Regular call initiation with media information + description: Example of a standard outbound call request body with SDP offer value: originatorAddress: tel:+17085852753 originatorName: tel:+17085852753 @@ -716,6 +737,7 @@ components: offer: sdp: "v=0\r\no=- 8066321617929821805 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\nm=audio 42988 RTP/SAVPF 102 113\r\nc=IN IP6 2001:e0:410:2448:7a05:9b11:66f2:c9e\r\nb=AS:64\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=candidate:1645903805 1 udp 2122262783 2001:e0:410:2448:7a05:9b11:66f2:c9e 42988 typ host generation 0 network-id 3 network-cost 900\r\na=ice-ufrag:4eKp\r\na=ice-pwd:D4sF5Pv9vx9ggaqxBlHbAFMx\r\na=ice-options:trickle renomination\r\na=mid:audio\r\n [...]" exampleMediaSessionResponse: + description: Example response body returned after successfully creating a media session value: originatorAddress: 'tel:+17085852753' originatorName: 'tel:+17085852753' @@ -726,28 +748,33 @@ components: status: Initial mediaSessionId: 0AEE1B58BAEEDA3EABA42B32EBB3DFE0DEAD3F90AE0CEB9EEB0C0F703E199FC00E7C6E648F50EE885FF0CE6C7E1CEE795EDD exampleSessionStatus183InProgress: + description: Session status update indicating the call is in progress (183 Session Progress) value: receiverSessionStatus: status: InProgress answer: sdp: "v=0\r\no=- 8066321617929821805 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\nm=audio 42988 RTP/SAVPF 102 113\r\nc=IN IP6 2001:e0:410:2448:7a05:9b11:66f2:c9e\r\nb=AS:64\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=candidate:1645903805 1 udp 2122262783 2001:e0:410:2448:7a05:9b11:66f2:c9e 42988 typ host generation 0 network-id 3 network-cost 900\r\na=ice-ufrag:4eKp\r\na=ice-pwd:D4sF5Pv9vx9ggaqxBlHbAFMx\r\na=ice-options:trickle renomination\r\na=mid:audio\r\n [...]" exampleSessionStatus180Ringing: + description: Session status update indicating the remote end is ringing (180 Ringing) value: receiverSessionStatus: status: Ringing exampleSessionStatus200Connected: + description: Session status update indicating the call has been answered and connected (200 OK) value: receiverSessionStatus: status: Connected answer: sdp: "v=0\r\no=- 4576312012535546667 4 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\nm=audio 47510 RTP/SAVPF 102 113\r\nc=IN IP6 2001:e0:410:243a:a344:cee7:7b39:bb1e\r\nb=AS:64\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=candidate:3108871805 1 udp 2122262783 2001:e0:410:243a:a344:cee7:7b39:bb1e 47510 typ host generation 0 network-id 3 network-cost 900\r\na=ice-ufrag:47Nx\r\na=ice-pwd:ln3CttOSkObcQ7A0tYO1LXqy\r\na=ice-options:trickle renomination\r\na=mid:audio\r\n [...]" exampleSessionStatusHold: + description: Session status update indicating the call has been placed on hold value: ReceiverSessionStatus: status: Hold answer: sdp: "v=0\r\no=- 4576312012535546667 4 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\nm=audio 47510 RTP/SAVPF 102 113\r\nc=IN IP6 2001:e0:410:243a:a344:cee7:7b39:bb1e\r\nb=AS:64\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=candidate:3108871805 1 udp 2122262783 2001:e0:410:243a:a344:cee7:7b39:bb1e 47510 typ host generation 0 network-id 3 network-cost 900\r\na=ice-ufrag:47Nx\r\na=ice-pwd:ln3CttOSkObcQ7A0tYO1LXqy\r\na=ice-options:trickle renomination\r\na=mid:audio\r\n [...]" exampleSessionStatusResume: + description: Session status update indicating a held call has been resumed value: ReceiverSessionStatus: status: Resume @@ -755,6 +782,7 @@ components: sdp: "v=0\r\no=- 4576312012535546667 4 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\nm=audio 47510 RTP/SAVPF 102 113\r\nc=IN IP6 2001:e0:410:243a:a344:cee7:7b39:bb1e\r\nb=AS:64\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=candidate:3108871805 1 udp 2122262783 2001:e0:410:243a:a344:cee7:7b39:bb1e 47510 typ host generation 0 network-id 3 network-cost 900\r\na=ice-ufrag:47Nx\r\na=ice-pwd:ln3CttOSkObcQ7A0tYO1LXqy\r\na=ice-options:trickle renomination\r\na=mid:audio\r\n [...]" exampleSessionStatusConnectedWithLocation: summary: Answering party accepts the call and shares their device location + description: Session status update for a connected call where the answering party shares device location value: status: Connected answer: @@ -772,6 +800,7 @@ components: timestamp: '2025-10-06T19:32:10Z' exampleSessionStatusLocationUpdate: summary: Post-setup location update by either party + description: Session status update carrying a location update from either call party after the session is established value: status: Connected locationDetails: @@ -787,6 +816,7 @@ components: timestamp: '2025-10-06T19:45:00Z' exampleEmergencyMediaSessionRequest: summary: Emergency call initiation with location details + description: Example request body for initiating an emergency call with caller location details value: originatorAddress: 'tel:+17085852753' originatorName: Alice @@ -809,6 +839,7 @@ components: timestamp: '2025-10-06T19:31:25Z' exampleLocatedMediaSessionRequest: summary: Regular call initiation with location details + description: Example request body for a regular call that includes caller location details value: originatorAddress: 'tel:+17085852753' originatorName: Alice diff --git a/code/API_definitions/webrtc-events.yaml b/code/API_definitions/webrtc-events.yaml index d62084f..412990f 100644 --- a/code/API_definitions/webrtc-events.yaml +++ b/code/API_definitions/webrtc-events.yaml @@ -366,6 +366,7 @@ paths: schema: type: array minItems: 0 + maxItems: 100 items: $ref: '#/components/schemas/Subscription' "400": @@ -505,11 +506,15 @@ components: securitySchemes: openId: type: openIdConnect + description: OpenID Connect authentication via discovery metadata. openIdConnectUrl: https://example.com/.well-known/openid-configuration notificationsBearerAuth: type: http scheme: bearer bearerFormat: "{$request.body#/sinkCredential.credentialType}" + description: |- + Bearer token for notification delivery. Token format is determined + by `sinkCredential.credentialType` in the subscription request. parameters: SubscriptionId: name: subscriptionId @@ -531,11 +536,14 @@ components: $ref: "#/components/schemas/XCorrelator" schemas: XCorrelator: + description: Correlator string, UUID format recommended but any string matching the pattern can be used type: string pattern: ^[a-zA-Z0-9-_:;.\/<>{}]{0,256}$ + maxLength: 256 example: "b4333c46-49c0-4f62-80d7-f0ef930f1c46" ErrorInfo: + description: A structured error response providing details about a failed request, including the HTTP status code, an error code, and a human-readable message type: object required: - status @@ -544,12 +552,17 @@ components: properties: status: type: integer + format: int32 + minimum: 100 + maximum: 599 description: HTTP response status code code: type: string + maxLength: 96 description: A human-readable code to describe the error message: type: string + maxLength: 512 description: A human-readable description of what the event represents SubscriptionRequest: @@ -567,6 +580,7 @@ components: type: string format: uri pattern: ^https:\/\/.+$ + maxLength: 1024 description: The address to which events shall be delivered using the selected protocol. example: "https://endpoint.example.com/sink" sinkCredential: @@ -621,14 +635,17 @@ components: subscriptionExpireTime: type: string format: date-time + maxLength: 64 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 + format: int32 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 + maximum: 1000000 example: 5 initialEvent: type: boolean @@ -648,6 +665,7 @@ components: subscriptionExpireTime: type: string format: date-time + maxLength: 64 example: "2023-01-17T13:18:23.682Z" description: |- The updated subscription expiration time requested by the API consumer. @@ -688,9 +706,11 @@ components: accessToken: description: REQUIRED. An access token is a previously acquired token granting access to the target resource. type: string + maxLength: 8192 accessTokenExpiresUtc: type: string format: date-time + maxLength: 64 description: | REQUIRED. An absolute (UTC) timestamp at which the token shall be considered expired. In the case of an ACCESS_TOKEN_EXPIRED termination reason, implementation should notify the client before the expiration date. @@ -714,12 +734,14 @@ components: `deviceId` related to a valid registration. - org.camaraproject.webrtc-events.v0.session-status requires a `deviceId` related to a valid registration. + type: object required: - deviceId properties: deviceId: type: string format: uuid + maxLength: 36 description: |- The device-id of the client in UUID format. A unique identifier for the physical device where a registration is initiated. Generated @@ -758,6 +780,7 @@ components: type: string format: uri pattern: ^https:\/\/.+$ + maxLength: 1024 description: The address to which events shall be delivered using the selected protocol. example: "https://endpoint.example.com/sink" types: @@ -775,6 +798,7 @@ components: startsAt: type: string format: date-time + maxLength: 64 description: | Date when the event subscription will begin/began It must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone. @@ -782,6 +806,7 @@ components: expiresAt: type: string format: date-time + maxLength: 64 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. It must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone. @@ -811,16 +836,19 @@ components: SubscriptionId: type: string + maxLength: 256 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 RegistrationId: type: string + maxLength: 256 description: The unique identifier of the WebRTC registration. example: ln3C-ttOSk-ObcQ7A0-tYO1LXqy CloudEvent: description: The notification callback + type: object required: - id - source @@ -830,11 +858,13 @@ components: properties: id: type: string + maxLength: 256 description: identifier of this event, that must be unique in the source context. source: $ref: "#/components/schemas/Source" type: type: string + maxLength: 512 description: |- event-type that describes type of notification specversion: @@ -867,6 +897,7 @@ components: type: string format: uri-reference minLength: 1 + maxLength: 2048 description: |- Identifies the context in which an event happened - be a non-empty `URI-reference` like: - URI with a DNS authority: @@ -882,6 +913,7 @@ components: DateTime: type: string format: date-time + maxLength: 64 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. @@ -946,18 +978,22 @@ components: type: string description: Sender (originator) address pattern: '^(tel:\+[0-9]{5,15}|sip:[A-Za-z0-9_.!%+\-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,})$' + maxLength: 256 example: 'tel:+11234567899' originatorName: type: string + maxLength: 256 description: Friendly name of the call originator example: 'Alice' receiverAddress: type: string description: Receiver (terminator) address pattern: '^(tel:\+[0-9]{5,15}|sip:[A-Za-z0-9_.!%+\-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,})$' + maxLength: 256 example: 'tel:+11234567899' receiverName: type: string + maxLength: 256 description: Friendly name of the call terminator example: 'Bob' status: @@ -983,18 +1019,23 @@ components: - NotReachable - Busy offer: - $ref: '#/components/schemas/WrtcSDPDescriptor' + $ref: '#/components/schemas/WrtcSdpDescriptor' answer: - $ref: '#/components/schemas/WrtcSDPDescriptor' + $ref: '#/components/schemas/WrtcSdpDescriptor' mediaSessionId: type: string + maxLength: 256 description: The media session ID created by the network. The mediaSessionId shall not be included in POST requests by the client, but must be included in the notifications from the network to client. example: '0AEE1B58BAEEDA3EABA42B32EBB3DFE07E9CFF402EAF9EED8EF' reason: type: string + maxLength: 2048 description: The description of the event that has happened within the session sequenceNumber: type: integer + format: int32 + minimum: 1 + maximum: 2147483647 description: The sequence number of the notification sent to client locationDetails: description: Location of the party that generated this event. @@ -1002,6 +1043,7 @@ components: - $ref: '#/components/schemas/LocationDetails' MediaSessionStatusUpdate: + description: MediaSession information emitted on a session-status event allOf: - $ref: "#/components/schemas/MediaSession" - type: object @@ -1010,6 +1052,7 @@ components: - status MediaSessionInvite: + description: MediaSession information emitted on a session-invitation event allOf: - $ref: "#/components/schemas/MediaSession" - type: object @@ -1019,11 +1062,13 @@ components: - receiverAddress - status - WrtcSDPDescriptor: + WrtcSdpDescriptor: + description: SDP descriptor object carrying an inlined Session Description Protocol payload type: object properties: sdp: type: string + maxLength: 65536 description: |- An inlined session description in SDP format [RFC4566].If XML syntax is used, the content of this element SHALL be embedded in a CDATA section @@ -1053,6 +1098,8 @@ components: $ref: "#/components/schemas/TerminationReason" terminationDescription: type: string + maxLength: 2048 + description: Human-readable explanation of why the subscription was terminated TerminationReason: type: string @@ -1095,6 +1142,8 @@ components: $ref: "#/components/schemas/RegistrationId" terminationDescription: type: string + maxLength: 2048 + description: Human-readable explanation of why the registration was terminated terminationReason: $ref: "#/components/schemas/RegistrationTerminationReason" @@ -1108,6 +1157,7 @@ components: - REGISTRATION_EXPIRED HTTPSubscriptionRequest: + description: Subscription request for HTTP-based event delivery. allOf: - $ref: "#/components/schemas/SubscriptionRequest" - type: object @@ -1116,6 +1166,7 @@ components: $ref: "#/components/schemas/HTTPSettings" HTTPSubscriptionResponse: + description: Subscription resource returned for HTTP-based event delivery. allOf: - $ref: "#/components/schemas/Subscription" - type: object @@ -1124,6 +1175,7 @@ components: $ref: "#/components/schemas/HTTPSettings" HTTPSettings: + description: HTTP protocol settings for event delivery. type: object properties: headers: @@ -1134,6 +1186,7 @@ components: NOTE: 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 + maxLength: 512 method: type: string description: The HTTP method to use for sending the message. @@ -1193,11 +1246,13 @@ components: timestamp: type: string format: date-time + maxLength: 64 description: The timestamp (in ISO 8601 format) indicating when the location information was Calculated. \nThis is crucial for emergency services to assess the timeliness of the data. if not provided current timestamp will be used by default" CircleCoordinates: + description: Geographic coordinates defining a circular area by center point and radius type: object required: - latitude @@ -1217,6 +1272,7 @@ components: format: float description: Radius of the circle in meters, indicating the uncertainty. EllipsoidCoordinates: + description: Geographic coordinates defining an ellipsoidal uncertainty area in the WGS84 geocentric coordinate system type: object required: - latitude diff --git a/code/API_definitions/webrtc-registration.yaml b/code/API_definitions/webrtc-registration.yaml index 214a5a9..b973a24 100644 --- a/code/API_definitions/webrtc-registration.yaml +++ b/code/API_definitions/webrtc-registration.yaml @@ -162,6 +162,7 @@ paths: schema: type: string format: uuid + maxLength: 36 security: - openId: - webrtc-registration:sessions:read @@ -179,7 +180,7 @@ paths: type: array maxItems: 10 items: - $ref: '#/components/schemas/regSessionResponse' + $ref: '#/components/schemas/RegSessionResponse' examples: MultipleRegistrations: summary: Device with multiple active registrations (multi-MSISDN) @@ -230,7 +231,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/regSessionRequest' + $ref: '#/components/schemas/RegSessionRequest' responses: '201': description: Created @@ -240,7 +241,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/regSessionResponse' + $ref: '#/components/schemas/RegSessionResponse' '400': $ref: "#/components/responses/CreateSessionBadRequest400" '401': @@ -279,7 +280,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/regSessionResponse' + $ref: '#/components/schemas/RegSessionResponse' examples: ActiveRegistration: summary: Active registration response @@ -332,7 +333,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/regSessionUpdate' + $ref: '#/components/schemas/RegSessionUpdate' responses: '200': description: Ok @@ -342,7 +343,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/regSessionResponse' + $ref: '#/components/schemas/RegSessionResponse' '204': description: Updated the registration status (no content) headers: @@ -391,6 +392,7 @@ components: securitySchemes: openId: type: openIdConnect + description: OpenID Connect authentication via discovery metadata. openIdConnectUrl: https://example.com/.well-known/openid-configuration headers: x-correlator: @@ -413,12 +415,16 @@ components: explode: false schema: type: string + maxLength: 256 schemas: XCorrelator: + description: Correlator string, UUID format recommended but any string matching the pattern can be used type: string pattern: ^[a-zA-Z0-9-_:;.\/<>{}]{0,256}$ + maxLength: 256 example: "b4333c46-49c0-4f62-80d7-f0ef930f1c46" - regSessionRequest: + RegSessionRequest: + description: Request body for creating a new WebRTC device registration type: object required: - deviceId @@ -426,6 +432,7 @@ components: deviceId: type: string format: uuid + maxLength: 36 description: |- The deviceId of the client in UUID format. A unique identifier for the physical device where a registration is initiated. Generated @@ -433,6 +440,7 @@ components: registrationExpireTime: type: string format: date-time + maxLength: 64 description: |- Optional **absolute** expiry moment for this registration. It must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must include a time offset. @@ -459,7 +467,8 @@ components: according to its own TTL policy and return the authoritative expiry in `expiresAt` in the response. - regSessionResponse: + RegSessionResponse: + description: Response body returned after successfully creating or refreshing a WebRTC device registration type: object required: - registrationId @@ -468,10 +477,12 @@ components: $ref: '#/components/schemas/RegistrationInformation' registrationId: type: string + maxLength: 256 description: The registration session ID is returned when registering a device with the network . Clients must utilize this ID to as a parameter in the call-handling and subscription APIs. expiresAt: type: string format: date-time + maxLength: 64 description: |- Authoritative expiry timestamp calculated **after** applying the refresh logic. Clients MUST treat this value as the new upper-bound @@ -481,12 +492,14 @@ components: and plan to refresh well in advance to avoid race conditions. A suggested margin is 120 seconds before expiry. It must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone. - regSessionUpdate: + RegSessionUpdate: + description: Request body for refreshing an existing WebRTC device registration type: object properties: registrationExpireTime: type: string format: date-time + maxLength: 64 description: |- Optional **absolute** UTC timestamp that *requests* a new expiry. It must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must include a time offset. @@ -506,10 +519,12 @@ components: It must follow [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and must have time zone. RegistrationStatus: + description: Current registration status of the WebRTC device type: string enum: - Registered RegistrationInformation: + description: Information about the registered device including phone number and registration status type: object properties: phoneNumber: @@ -517,6 +532,7 @@ components: regStatus: $ref: '#/components/schemas/RegistrationStatus' ErrorInfo: + description: A structured error response providing details about a failed request, including the HTTP status code, an error code, and a human-readable message type: object required: - status @@ -525,17 +541,23 @@ components: properties: status: type: integer + format: int32 + minimum: 100 + maximum: 599 description: HTTP response status code code: type: string + maxLength: 96 description: Friendly Code to describe the error message: type: string + maxLength: 512 description: A human readable description of what the event represent 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}$' + maxLength: 128 example: "+123456789" responses: