diff --git a/api_oas3/admin_api.yaml b/api_oas3/admin_api.yaml new file mode 100644 index 00000000..859bea72 --- /dev/null +++ b/api_oas3/admin_api.yaml @@ -0,0 +1,274 @@ +openapi: 3.0.0 +info: + version: 0.1.0 + title: Digital Citizenship Admin API. + description: Digital Citizenship Admin API. +paths: + "/services/{service_id}": + parameters: + - name: service_id + in: path + required: true + description: The ID of an existing Service. + schema: + type: string + get: + operationId: getService + summary: Get Service + description: A previously created service with the provided service ID is returned. + responses: + "200": + description: Service found. + content: + application/json: + schema: + $ref: "#/components/schemas/Service" + examples: + response: + value: + id: 2b3e728c1a5d1efa035c-0000000000000001 + authorized_recipients: + - XXXYYY79A95Y000X + department_name: dept + organization_name: org + service_id: 2b3e728c1a5d1efa035c + service_name: service + version: 1 + authorized_cidrs: [] + "401": + description: Unauthorized + "404": + description: No service found for the provided ID. + put: + responses: + "200": + description: Service updated. + content: + application/json: + schema: + $ref: "#/components/schemas/Service" + examples: + response: + value: + id: 2b3e728c1a5d1efa035c-0000000000000001 + authorized_recipients: + - XXXYYY79A95Y000X + department_name: dept + organization_name: org + service_id: 2b3e728c1a5d1efa035c + service_name: service + version: 1 + authorized_cidrs: [] + "401": + description: Unauthorized + "404": + description: No service found for the provided ID. + summary: Update Service + operationId: updateService + description: |- + Update an existing service with the attributes provided in the + request payload. + requestBody: + $ref: "#/components/requestBodies/Service" + /debug: + get: + responses: + "200": + description: |- + Returns a JSON object with HTTP request parameters, headers + and payload. + content: + application/json: + schema: + type: object + properties: {} + examples: + response: + value: + auth: + groups: + - ApiInfoRead + - ApiMessageRead + - ApiLimitedMessageWrite + - ApiDebugRead + kind: IAzureApiAuthorization + subscriptionId: 9d39a48a64370b1b326dfb70307008 + userId: 9d39a48a64370b1b326dfb70307008 + headers: + cache-control: no-cache + connection: Keep-Alive + accept: application/json + accept-encoding: gzip, deflate + max-forwards: "10" + user-agent: PostmanRuntime/6.4.1 + ocp-apim-subscription-key: d5310672bc1d8cf383ca98 + x-user-id: 9d39a48a64370b1b326dfb70307008 + x-user-groups: Developers,ApiInfoRead,ApiMessageRead,ApiLimitedMessageWrite,ApiDebugRead + x-subscription-id: 9d39a48a64370b1b326dfb70307008 + x-user-email: example@example.com + x-functions-key: 9d39a48a64370b1b326dfb70307008 + x-forwarded-for: 111.97.111.36, 111.40.111.45:1088 + x-waws-unencoded-url: /adm/debug + x-original-url: /adm/debug + x-arr-log-id: 9d39a48-a64370b-1b326dfb703-07008 + x-forwarded-proto: https + content-type: application/json + content-length: "0" + params: {} + user: + email: example@example.com + kind: IAzureUserAttributes + service: + authorized_recipients: + - XXXBEN86A11Y755X + department_name: dept + organization_name: org + service_id: 9d39a48a64370b1b326dfb70307008 + service_name: service + id: 9d39a48a64370b1b326dfb70307008-0000000000000000 + version: 0 + authorized_cidrs: [] + kind: IRetrievedService + "401": + description: Unauthorized + description: An endpoint to debug GET requests to the API backend. + operationId: getDebug + summary: Debug GET + post: + responses: + "200": + description: |- + Returns a JSON object with HTTP request parameters, headers + and payload. + content: + application/json: + schema: + type: object + properties: {} + examples: + response: + value: + auth: + groups: + - ApiInfoRead + - ApiMessageRead + - ApiLimitedMessageWrite + - ApiDebugRead + kind: IAzureApiAuthorization + subscriptionId: 9d39a48a64370b1b326dfb70307008 + userId: 9d39a48a64370b1b326dfb70307008 + headers: + cache-control: no-cache + connection: Keep-Alive + accept: application/json + accept-encoding: gzip, deflate + max-forwards: "10" + user-agent: PostmanRuntime/6.4.1 + ocp-apim-subscription-key: d5310672bc1d8cf383ca98 + x-user-id: 9d39a48a64370b1b326dfb70307008 + x-user-groups: Developers,ApiInfoRead,ApiMessageRead,ApiLimitedMessageWrite,ApiDebugRead + x-subscription-id: 9d39a48a64370b1b326dfb70307008 + x-user-email: example@example.com + x-functions-key: 9d39a48a64370b1b326dfb70307008 + x-forwarded-for: 111.97.111.36, 111.40.111.45:1088 + x-waws-unencoded-url: /adm/debug + x-original-url: /adm/debug + x-arr-log-id: 9d39a48-a64370b-1b326dfb703-07008 + x-forwarded-proto: https + content-type: application/json + content-length: "0" + params: {} + user: + email: example@example.com + kind: IAzureUserAttributes + service: + authorized_recipients: + - XXXBEN86A11Y755X + department_name: dept + organization_name: org + service_id: 9d39a48a64370b1b326dfb70307008 + service_name: service + id: 9d39a48a64370b1b326dfb70307008-0000000000000000 + version: 0 + authorized_cidrs: [] + kind: IRetrievedService + "401": + description: Unauthorized + description: An endpoint to debug POST requests to the API backend. + operationId: postDebug + summary: Debug POST + /services: + post: + responses: + "200": + description: Service created. + content: + application/json: + schema: + $ref: "#/components/schemas/Service" + examples: + response: + value: + id: 2b3e728c1a5d1efa035c-0000000000000001 + authorized_recipients: + - XXXYYY79A95Y000X + department_name: dept + organization_name: org + service_id: 2b3e728c1a5d1efa035c + service_name: service + version: 1 + authorized_cidrs: [] + "401": + description: Unauthorized + summary: Create Service + description: |- + Create a new Service with the attributes provided in the requst + payload. + operationId: createService + requestBody: + $ref: "#/components/requestBodies/Service" +security: + - SubscriptionKey: [] +servers: + - url: /adm +components: + requestBodies: + Service: + content: + application/json: + schema: + $ref: "#/components/schemas/Service" + description: The Service payload. + x-examples: + application/json: + authorized_recipients: + - XXXYYY79A95Y000X + department_name: dept + organization_name: org + service_id: 2b3e728c1a5d1efa035c + service_name: service + authorized_cidrs: [] + securitySchemes: + SubscriptionKey: + type: apiKey + name: Ocp-Apim-Subscription-Key + in: header + description: The API key obtained through the developer portal. + schemas: + Service: + $ref: definitions.yaml#/Service + ServiceId: + $ref: definitions.yaml#/ServiceId + ServiceName: + $ref: definitions.yaml#/ServiceName + OrganizationName: + $ref: definitions.yaml#/OrganizationName + DepartmentName: + $ref: definitions.yaml#/DepartmentName + CIDR: + $ref: definitions.yaml#/CIDR + MaxAllowedPaymentAmount: + $ref: definitions.yaml#/MaxAllowedPaymentAmount + OrganizationFiscalCode: + $ref: definitions.yaml#/OrganizationFiscalCode + diff --git a/api_oas3/public_api_v1.yaml b/api_oas3/public_api_v1.yaml new file mode 100644 index 00000000..d95a8c11 --- /dev/null +++ b/api_oas3/public_api_v1.yaml @@ -0,0 +1,615 @@ +openapi: 3.0.0 +info: + version: 1.0.0 + title: Digital Citizenship API + contact: + name: Digital Transformation Team and AgID + url: https://forum.italia.it/c/progetto-io + x-logo: + url: https://io.italia.it/assets/img/io-logo-blue.svg + description: > + + # Warning / Avvertenza + + **Questa è una API sperimentale che (probabilmente) + subirà dei cambiamenti mano a mano che il servizio di + messaggistica IO si evolverà.** + + **This is an experimental API that is (most probably) + going to change as we evolve the IO Messaging service.** + + # Introduction + + This is the documentation of the Digital Citizenship API. This API enables Public Administration services to integrate with the Digital Citizenship platform of the Italian Government. The platform enables services to communicate with Italian Citizens via the [IO app](https://io.italia.it/). + + # How to get an API key + + To get access to this API, you'll need to register on the [Digital Citizenship Developer Portal](https://developer.cd.italia.it/). + + After the registration step, you have to click on the button that says `subscribe to the digital citizenship api` to receive the API key that you will use to authenticate the API calls. + + You will also receive an email with further instructions, including a fake Fiscal Code that you will be able to use to send test messages. Messages sent to the fake Fiscal Code will be notified to the email address used during the registration process on the developer portal. + + # Messages + + ## What is a message + + Messages are the primary form of communication enabled by the Digital Citizenship APIs. Messages are **personal** communications directed to a **specific citizen**. You will not be able to use this API to broadcast a message to a group of citizens, you will have to compose e specific, personalized message to each citizen you want to communicate to. + + The recipient of the message (i.e. a citizen) is identified trough his [Fiscal Code](https://it.wikipedia.org/wiki/Codice_fiscale). + + ## Message format + + A message is conceptually very similar to an email and, in its simplest form, is composed of the following attributes: + + * A required `subject`: a short description of the topic. + * A required `markdown` body: a Markdown representation of the body (see + below on what Markdown tags are allowed). + * An optional `payment_data`: in case the message is a payment request, + the _payment data_ will enable the recipient to pay the requested amount + via [PagoPA](https://www.agid.gov.it/it/piattaforme/pagopa). + * An optional `due_date`: a _due date_ that let the recipient + add a reminder when receiving the message. The format for all + dates is [ISO8601](https://it.wikipedia.org/wiki/ISO_8601) with time + information and UTC timezone (ie. "2018-10-13T00:00:00.000Z"). + + ## Allowed Markdown formatting + + Not all Markdown formatting is currently available. Currently you can use the following formatting: + + * Headings + * Text stylings (bold, italic, etc...) + * Lists (bullet and numbered) + + ## Process for sending a message to a citizen + + Not every citizen will be interested in what you have to say and not every citizen you want to communicate to will be registered on the Digital Citizenship platform. For this reason, before sending a message you will have to check whether the recipient is registered on the platform and that he has not yet opted out from receiving messages from you. + + The process for sending a message is made of 3 steps: + + 1. Call [getProfile](#operation/getProfile): if the profile does not exist + or the recipient has opted-out from your service, you cannot send the + message and you must stop here. + 1. Call [submitMessageforUser](#operation/submitMessageforUser) to submit + a new message. + 1. (optional) Call [getMessage](#operation/getMessage) to check whether + the message has been notified to the recipient. +tags: + - name: public + description: Public APIs + - name: restricted + description: Restricted APIs +x-tagGroups: + - name: For Public Administrations and services + tags: + - public + - name: For the IO app + tags: + - restricted +security: + - SubscriptionKey: [] +paths: + "/services/{service_id}": + parameters: + - name: service_id + in: path + required: true + description: The ID of an existing Service. + schema: + type: string + get: + tags: + - restricted + operationId: getService + summary: Get Service + description: A previously created service with the provided service ID is returned. + responses: + "200": + description: Service found. + content: + application/json: + schema: + $ref: "#/components/schemas/ServicePublic" + examples: + response: + value: + department_name: dept + organization_name: org + service_id: 2b3e728c1a5d1efa035c + service_name: service + version: 1 + "401": + description: Unauthorized + "404": + description: No service found for the provided ID. + "429": + description: Too many requests + "/profiles/{recipient}/sender-services": + get: + tags: + - restricted + operationId: getServicesByRecipient + summary: Get Services by recipient + description: >- + Returns the service IDs of all the services that have contacted the + recipient, + + identified by the provided fiscal code, at least once. + responses: + "200": + description: Found. + content: + application/json: + schema: + $ref: "#/components/schemas/PaginatedServiceTupleCollection" + "401": + description: Unauthorized + "429": + description: Too many requests + parameters: + - name: recipient + in: path + required: true + description: The recipient's fiscal code. + schema: + type: string + minLength: 16 + maxLength: 16 + pattern: "[A-Z]{6}[0-9LMNPQRSTUV]{2}[ABCDEHLMPRST][0-9LMNPQRSTUV]{2}[A-Z][\ + 0-9LMNPQRSTUV]{3}[A-Z]" + /services: + get: + tags: + - restricted + operationId: getVisibleServices + summary: Get all visibile services. + description: Returns all the services that have the 'is_visibile' field value set to + true. + responses: + "200": + description: Found. + content: + application/json: + schema: + $ref: "#/components/schemas/PaginatedServiceTupleCollection" + "401": + description: Unauthorized + "429": + description: Too many requests + "/messages/{fiscal_code}/{id}": + get: + tags: + - public + - restricted + operationId: getMessage + summary: Get Message + description: |- + The previously created message with the provided message ID is + returned. + parameters: + - $ref: "#/components/parameters/FiscalCode" + - name: id + in: path + required: true + description: The ID of the message. + schema: + type: string + responses: + "200": + description: Message found. + content: + application/json: + schema: + $ref: "#/components/schemas/MessageResponseWithContent" + examples: + response: + value: + message: + id: 01BX9NSMKAAAS5PSP2FATZM6BQ + fiscal_code: QXJNTX9RCRVD6V4O + time_to_live: 3600 + content: + subject: message subject, aliquip sint nulla in estinut + markdown: >- + Lorem ipsum dolor sit amet, consectetur adipiscing + elit. Maecenas et mollis felis. + + Vivamus orci nisl, commodo ut sodales ut, eleifend a libero. Donec dapibus, turpis in mattis tempor, + + risus nunc malesuada ex, non aliquet metus nunc a lacus. Aenean in arcu vitae nisl porta + + fermentum nec non nibh. Phasellus tortor tellus, semper in metus eget, eleifend + + laoreet nibh. Aenean feugiat lectus ut nisl eleifend gravida. + sender_service_id: 01BX9NSMKVXXS5PSP2FATZM6QX + notification: + email: QUEUED + "401": + description: Unauthorized + "404": + description: No message found for the provided ID. + content: + application/json: + schema: + $ref: "#/components/schemas/ProblemJson" + "429": + description: Too many requests + "/messages/{fiscal_code}": + get: + tags: + - restricted + operationId: getMessagesByUser + summary: Get messages by user + description: >- + Returns the messages for the user identified by the provided fiscal + code. + + Messages will be returned in inverse acceptance order (from last to first). + + The "next" field, when present, contains an URL pointing to the next page of results. + responses: + "200": + description: Found. + content: + application/json: + schema: + $ref: "#/components/schemas/PaginatedCreatedMessageWithoutContentCo\ + llection" + examples: + response: + value: + items: + - id: 01BX9NSMKVXXS5PSP2FATZMYYY + fiscal_code: PUPFHK4TD3MWL20W + time_to_live: 3600 + content: + subject: amet sunt dolor nulla esseesseanim + markdown: >- + Lorem ipsum dolor sit amet, consectetur adipiscing + elit. Maecenas et mollis felis. + + Vivamus orci nisl, commodo ut sodales ut, eleifend a libero. Donec dapibus, turpis in mattis tempor, + + risus nunc malesuada ex, non aliquet metus nunc a lacus. Aenean in arcu vitae nisl porta + + fermentum nec non nibh. Phasellus tortor tellus, semper in metus eget, eleifend + + laoreet nibh. Aenean feugiat lectus ut nisl eleifend gravida. + sender_service_id: 01BX9NSMKVXXS5PSP2FATZMZZZ + - id: 01BX9NSMKVXXS5PSP2FATZM123 + fiscal_code: PKTINH4QDQUV696L + time_to_live: 3600 + content: + subject: idUt quis tempor esseesseanim + markdown: >- + Nullam dapibus metus sed elementum efficitur. + Curabitur facilisis sagittis risus nec sodales. + + Vestibulum in eros sapien. Donec ac odio sit amet dui semper ornare eget nec odio. Pellentesque habitant + + morbi tristique senectus et netus et malesuada fames ac turpis egestas. Praesent nibh ex, mattis sit amet + + felis id, sodales euismod velit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + sender_service_id: 01BX9NSMKVXXS5PSP2FATZMWWW + page_size: 2 + next: https://example.com/next + "401": + description: Unauthorized + "404": + description: No message found. + content: + application/json: + schema: + $ref: "#/components/schemas/ProblemJson" + "429": + description: Too many requests + parameters: + - $ref: "#/components/parameters/FiscalCode" + - $ref: "#/components/parameters/PaginationRequest" + post: + tags: + - public + operationId: submitMessageforUser + summary: Submit a message + description: |- + Submits a message to a user. + On error, the reason is returned in the response payload. + In order to call `submitMessageforUser`, before sending any message, + the sender MUST call `getProfile` and check that the profile exists + (for the specified fiscal code) and that the `sender_allowed` field + of the user's profile it set to `true`. + parameters: + - $ref: "#/components/parameters/FiscalCode" + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/NewMessage" + x-examples: + application/json: + time_to_live: 3600 + content: + subject: ipsum labore deserunt fugiat + markdown: >- + Nullam dapibus metus sed elementum efficitur. Curabitur + facilisis sagittis risus nec sodales. + + Vestibulum in eros sapien. Donec ac odio sit amet dui semper ornare eget nec odio. Pellentesque habitant + + morbi tristique senectus et netus et malesuada fames ac turpis egestas. Praesent nibh ex, mattis sit amet + + felis id, sodales euismod velit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + responses: + "201": + description: Message created. + headers: + Location: + description: >- + Location (URL) of created message resource. + + A GET request to this URL returns the message status and details. + schema: + type: string + content: + application/json: + schema: + type: object + properties: + id: + type: string + description: The identifier of the created message. + examples: + response: + value: + id: 01BX9NSMKVXXS5PSP2FATZMYYY + "400": + description: Invalid payload. + content: + application/json: + schema: + $ref: "#/components/schemas/ProblemJson" + "401": + description: Unauthorized + "429": + description: Too many requests + "500": + description: The message cannot be delivered. + content: + application/json: + schema: + $ref: "#/components/schemas/ProblemJson" + "/profiles/{fiscal_code}": + get: + tags: + - public + operationId: getProfile + summary: Get a User Profile + description: |- + Returns the preferences for the user identified by the provided + fiscal code. The field `sender_allowed` is set fo `false` in case + the service which is calling the API is blacklisted by the user. + responses: + "200": + description: Found. + content: + application/json: + schema: + $ref: "#/components/schemas/Profile" + examples: + response: + value: + email: foobar@example.com + version: 1 + "401": + description: Unauthorized + "404": + description: No user found for the provided fiscal code. + content: + application/json: + schema: + $ref: "#/components/schemas/ProblemJson" + "429": + description: Too many requests + parameters: + - $ref: "#/components/parameters/FiscalCode" + post: + tags: + - restricted + responses: + "200": + description: Profile updated. + content: + application/json: + schema: + $ref: "#/components/schemas/ExtendedProfile" + examples: + response: + value: + email: foobar@example.com + version: 0 + "400": + description: Invalid payload. + content: + application/json: + schema: + $ref: "#/components/schemas/ProblemJson" + "401": + description: Unauthorized + "404": + description: Not found + "429": + description: Too many requests + "500": + description: Profile cannot be updated. + content: + application/json: + schema: + $ref: "#/components/schemas/ProblemJson" + description: |- + Create or update the preferences for the user identified by the + provided fiscal code. + operationId: upsertProfile + summary: Updates a User Profile + parameters: + - $ref: "#/components/parameters/FiscalCode" + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/ExtendedProfile" + x-examples: + application/json: + email: foobar@example.com + /info: + get: + tags: + - restricted + operationId: getInfo + responses: + "200": + description: Returns success if the API-Key is right. + content: + application/json: + schema: + type: object + properties: {} + "401": + description: Unauthorized + "429": + description: Too many requests + description: An endpoint to test authenticated access to the API backend. + summary: API test endpoint +servers: + - url: https://api.cd.italia.it/api/v1 +components: + parameters: + PaginationRequest: + name: cursor + in: query + description: An opaque identifier that points to the next item in the collection. + example: 01BX9NSMKVXXS5PSP2FATZM123 + schema: + type: string + minimum: 1 + FiscalCode: + name: fiscal_code + in: path + required: true + description: The fiscal code of the user, all upper case. + example: SPNDNL80R13C555X + schema: + type: string + minLength: 16 + maxLength: 16 + pattern: "[A-Z]{6}[0-9LMNPQRSTUV]{2}[ABCDEHLMPRST][0-9LMNPQRSTUV]{2}[A-Z][0-9L\ + MNPQRSTUV]{3}[A-Z]" + securitySchemes: + SubscriptionKey: + type: apiKey + name: Ocp-Apim-Subscription-Key + in: header + description: The API key obtained through the developer portal. + schemas: + ProblemJson: + $ref: definitions.yaml#/ProblemJson + NotificationChannel: + $ref: definitions.yaml#/NotificationChannel + BlockedInboxOrChannel: + $ref: definitions.yaml#/BlockedInboxOrChannel + NotificationChannelStatusValue: + $ref: definitions.yaml#/NotificationChannelStatusValue + NotificationChannelStatus: + $ref: definitions.yaml#/NotificationChannelStatus + PaymentData: + $ref: definitions.yaml#/PaymentData + PaymentNoticeNumber: + $ref: definitions.yaml#/PaymentNoticeNumber + PaymentAmount: + $ref: definitions.yaml#/PaymentAmount + MaxAllowedPaymentAmount: + $ref: definitions.yaml#/MaxAllowedPaymentAmount + CreatedMessageWithContent: + $ref: definitions.yaml#/CreatedMessageWithContent + CreatedMessageWithoutContent: + $ref: definitions.yaml#/CreatedMessageWithoutContent + MessageResponseNotificationStatus: + $ref: definitions.yaml#/MessageResponseNotificationStatus + MessageResponseWithContent: + $ref: definitions.yaml#/MessageResponseWithContent + MessageResponseWithoutContent: + $ref: definitions.yaml#/MessageResponseWithoutContent + FiscalCode: + $ref: definitions.yaml#/FiscalCode + OrganizationFiscalCode: + $ref: definitions.yaml#/OrganizationFiscalCode + MessageSubject: + $ref: definitions.yaml#/MessageSubject + MessageBodyMarkdown: + $ref: definitions.yaml#/MessageBodyMarkdown + PaginationResponse: + $ref: definitions.yaml#/PaginationResponse + CreatedMessageWithoutContentCollection: + $ref: definitions.yaml#/CreatedMessageWithoutContentCollection + PaginatedCreatedMessageWithoutContentCollection: + $ref: definitions.yaml#/PaginatedCreatedMessageWithoutContentCollection + BlockedInboxOrChannels: + $ref: definitions.yaml#/BlockedInboxOrChannels + Profile: + $ref: definitions.yaml#/Profile + LimitedProfile: + $ref: definitions.yaml#/LimitedProfile + ExtendedProfile: + $ref: definitions.yaml#/ExtendedProfile + IsInboxEnabled: + $ref: definitions.yaml#/IsInboxEnabled + AcceptedTosVersion: + $ref: definitions.yaml#/AcceptedTosVersion + IsWebhookEnabled: + $ref: definitions.yaml#/IsWebhookEnabled + HttpStatusCode: + $ref: definitions.yaml#/HttpStatusCode + NewMessageDefaultAddresses: + $ref: definitions.yaml#/NewMessageDefaultAddresses + EmailAddress: + $ref: definitions.yaml#/EmailAddress + PreferredLanguages: + $ref: definitions.yaml#/PreferredLanguages + SenderMetadata: + $ref: definitions.yaml#/SenderMetadata + Service: + $ref: definitions.yaml#/Service + ServiceTupleCollection: + $ref: definitions.yaml#/ServiceTupleCollection + PaginatedServiceTupleCollection: + $ref: definitions.yaml#/PaginatedServiceTupleCollection + ServicePublic: + $ref: definitions.yaml#/ServicePublic + ServiceId: + $ref: definitions.yaml#/ServiceId + ServiceTuple: + $ref: definitions.yaml#/ServiceTuple + ServiceName: + $ref: definitions.yaml#/ServiceName + OrganizationName: + $ref: definitions.yaml#/OrganizationName + DepartmentName: + $ref: definitions.yaml#/DepartmentName + CIDR: + $ref: definitions.yaml#/CIDR + Timestamp: + $ref: definitions.yaml#/Timestamp + HttpsUrl: + $ref: definitions.yaml#/HttpsUrl + TimeToLiveSeconds: + $ref: definitions.yaml#/TimeToLiveSeconds + NewMessage: + $ref: definitions.yaml#/NewMessage + MessageContent: + $ref: definitions.yaml#/MessageContent + MessageStatusValue: + $ref: definitions.yaml#/MessageStatusValue + MessageStatus: + $ref: definitions.yaml#/MessageStatus + PreferredLanguage: + $ref: definitions.yaml#/PreferredLanguage +