openapi: 3.0.2
x-explorer-enabled: false
x-samples-languages:
- curl
- node
- java
- javascript
- python
- go
info:
title: Messaging API
description: Send end user messages to the contact center.
contact:
name: Avaya API Team
url: https://developers.avayacloud.com/onecloud-ccaas
email: apiteam@avaya.com
license:
name: Avaya Software Development Kit (SDK) Software License Terms
url: http://support.avaya.com/css/P8/documents/101038288
version: 1.0.0
servers:
- url: '{protocol}://{server}{basePath}'
description: Open API
variables:
protocol:
enum:
- https
default: https
server:
default: avaya-infinity-hostname
basePath:
default: /api/digital/messaging
tags:
- name: Messaging
description: 'Send end user messages to the contact center.
'
security:
- BearerAuth: []
paths:
/v1/messages:
post:
tags:
- Messaging
summary: Send Message
description: 'Send end user messages asynchronously to the contact center. Based on the ''channel'' and ''headers''
fields, Avaya Infinity will determine if the message sent needs to be part of a new or existing conversation session.
If a new conversation session is created, the interaction will be routed according to the routing policies configured
for the ''headers.destination'' in the Admin Console.
'
operationId: sendDigitalAsyncMessage
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AsyncMessage'
examples:
Send Text Message (Minimal Details):
$ref: '#/components/examples/SendTextMessageMinimal'
Send Text Message (All Details):
$ref: '#/components/examples/SendTextMessageAllDetails'
Send Custom Message Plain Text:
$ref: '#/components/examples/SendCustomMessageText'
Send Custom Message Reply:
$ref: '#/components/examples/SendCustomMessageReply'
Send Custom Message Image:
$ref: '#/components/examples/SendCustomMessageImage'
Send Custom Message File:
$ref: '#/components/examples/SendCustomMessageFile'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/AsyncMessage'
examples:
Send Text Message Response (Minimal Details):
$ref: '#/components/examples/SendTextMessageResponseMinimal'
Send Text Message Response (All Details):
$ref: '#/components/examples/SendTextMessageResponseAllDetails'
Send Custom Message Plain Text Response:
$ref: '#/components/examples/SendCustomMessageTextResponse'
Send Custom Message Reply Response:
$ref: '#/components/examples/SendCustomMessageReplyResponse'
Send Custom Message Image Response:
$ref: '#/components/examples/SendCustomMessageImageResponse'
Send Custom Message File Response:
$ref: '#/components/examples/SendCustomMessageFileResponse'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'500':
$ref: '#/components/responses/InternalServerError'
deprecated: false
/v1/conversation-sessions/{conversationSessionId}:end:
post:
tags:
- Messaging
summary: End Conversation Session
description: 'End an ongoing conversation session. This will end the interaction within Avaya Infinity in whatever state
it is in.
'
operationId: endConversationSession
parameters:
- $ref: '#/components/parameters/conversationSessionId'
responses:
'204':
description: No Content
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'500':
$ref: '#/components/responses/InternalServerError'
/v1/attachments/signed-upload-uri:
post:
tags:
- Messaging
summary: Generate Signed Upload URI
description: 'Returns a signed upload URI for the client to upload a file.
'
operationId: generateSignedUploadUriv1
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/GenerateSignedUploadUri'
examples:
Generate Signed Upload URI:
$ref: '#/components/examples/GenerateSignedUploadUri'
responses:
'200':
description: Signed upload URI generated successfully
content:
application/json:
schema:
$ref: '#/components/schemas/GenerateSignedUploadUriResponse'
examples:
Generate Signed Upload URI:
$ref: '#/components/examples/GenerateSignedUploadUriResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'500':
$ref: '#/components/responses/InternalServerError'
/v1/attachments/signed-download-uri:
post:
tags:
- Messaging
summary: Generate Signed Download URI
description: 'Returns a signed download URI for the client to download a file from the storage.
'
operationId: generateSignedDownloadUriv1
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/GenerateSignedDownloadUri'
examples:
Generate Signed Download URI:
$ref: '#/components/examples/GenerateSignedDownloadUri'
responses:
'200':
description: Download URI generated successfully
content:
application/json:
schema:
$ref: '#/components/schemas/GenerateSignedDownloadUriResponse'
examples:
Generate Signed Download URI:
$ref: '#/components/examples/GenerateSignedDownloadUriResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'500':
$ref: '#/components/responses/InternalServerError'
components:
parameters:
conversationSessionId:
name: conversationSessionId
description: 'The internal id that represents the conversation session. This id is present in the response of the ''Send
Message'' API.
'
required: true
in: path
schema:
type: string
minLength: 1
maxLength: 50
example: 005e0708206c0d3db4807g6bj7
responses:
BadRequest:
description: Bad Request
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
examples:
default:
$ref: '#/components/examples/ErrorConstraintViolation'
Unauthorized:
description: Unauthorized.
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
examples:
default:
$ref: '#/components/examples/ErrorUnauthorized'
Forbidden:
description: Forbidden.
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
examples:
default:
$ref: '#/components/examples/ErrorForbidden'
InternalServerError:
description: Internal Server Error
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
examples:
default:
$ref: '#/components/examples/ErrorInternalServerError'
schemas:
AsyncMessage:
type: object
description: A conversation message
required:
- connectorId
- channel
- body
- headers
properties:
messageId:
readOnly: true
type: string
maxLength: 50
description: The id generated for this specific message
accountId:
readOnly: true
type: string
maxLength: 50
description: The id that represents the account
conversationSessionId:
readOnly: true
type: string
maxLength: 50
description: The id of the conversation session created or used internally
connectorId:
type: string
maxLength: 50
description: The id that represents the connector
channel:
type: string
description: The channel of the message. Currently only 'text' and 'messaging' are supported
example: text
maxLength: 100
enum:
- text
- messaging
body:
$ref: '#/components/schemas/BodyElement'
headers:
$ref: '#/components/schemas/MessageHeaders'
attachmentIds:
type: array
description: List of identifiers for the attachments in the message.
maxItems: 5
items:
type: string
maxLength: 50
contextParameters:
type: object
maxProperties: 10
description: Optional key/value context information. This information might be used to make business decisions on
how the conversation session is treated. For example, the client application might want to send hints about customer's
interest based on the customer's searches or FAQ browsing
additionalProperties:
type: string
maxLength: 256
contextMessages:
nullable: true
type: array
description: 'A list of messages that the third-party messaging application might have shown to the customer at
the start of the conversation. For example, a greeting/welcome message, a message giving options to customer
for starting the conversation, or a reminder to customer to send a message.
'
items:
$ref: '#/components/schemas/ContextMessage'
maxItems: 10
providerMetaData:
$ref: '#/components/schemas/ProviderMetaData'
sender:
$ref: '#/components/schemas/Sender'
correlationId:
type: string
maxLength: 256
description: 'The correlation id can be used to uniquely identify the client request.
'
Sender:
type: object
description: The sender information for the message
properties:
displayName:
type: string
maxLength: 70
description: The display name of the sender
BodyElement:
allOf:
- $ref: '#/components/schemas/BasicBodyElement'
- $ref: '#/components/schemas/RichMediaBodyElement'
MessageHeaders:
allOf:
- $ref: '#/components/schemas/BasicMessageHeaders'
- $ref: '#/components/schemas/CustomMessagingHeaders'
ProviderMetaData:
type: object
nullable: true
description: The metadata from the provider
properties:
messageId:
type: string
description: The provider side identifier for the message.
maxLength: 256
example: 611c9a6a4a250100d4bd2c54
messageTimestamp:
type: string
description: The date time when the message was captured by the provider (in ISO 8601 format including timezone,
'yyyy-MM-dd'T'HH:mm:ss[.SSS]Z')
example: '2025-08-15T12:00:00.000Z'
BasicMessageHeaders:
type: object
description: The header of the message
required:
- from
- destination
properties:
from:
type: string
maxLength: 256
nullable: false
description: 'The sender of the message set by the provider. For ''text'' channel, pass the sender number here.
For ''messaging'' channel, pass any identifier that is maintained by the provider that can uniquely identify
the sender. Any identifier that does not match a phone number or email address formats may not be displayed
to agents.
'
destination:
type: string
maxLength: 256
nullable: false
description: 'The destination configured in Avaya Infinity Admin Console. For ''text'' channel, this is the destination
number configured in the Admin Console. For ''messaging'' channel, this is the integration id visible in the Admin
Console. Routing settings configured for this destination will be used to route the interaction if a new conversation
session is created by this message. The destination, in the Admin Console, must be associated to the connector
whose connectorId is provided in the request.
'
to:
type: array
description: The To (recipients) of the message set by the provider
maxItems: 50
items:
type: string
maxLength: 256
CustomMessagingHeaders:
type: object
description: Header fields for a custom messaging message
properties:
channelAddress:
type: string
maxLength: 1024
description: 'The address of the channel. This could be the page id or URL of the application using which the
end customer is sending the message
'
channelName:
type: string
maxLength: 50
description: 'The name of the channel. This could be the name of the application or messaging platform using which
the end customer is sending the message
'
BasicBodyElement:
type: object
description: The body element containing the message text
properties:
text:
type: string
maxLength: 4096
description: The text content of the message. The max length is 1024 for text channel and 4096 for messaging channel
RichMediaBodyElement:
type: object
description: The body element containing the rich media content
properties:
type:
type: string
description: 'The type of the rich media content. This is the type of the rich media content that is being sent
in the message. The valid values are ''text'', ''reply'', and ''file''. The ''text'' type is default. If the type
is ''reply'', the selectedAction property must be provided. If the type is ''file'', the storage id of the image
or file must be provided in the ''attachmentIds'' property at the message root level.
'
enum:
- text
- reply
- file
selectedAction:
$ref: '#/components/schemas/SelectedAction'
SelectedAction:
type: object
description: 'The action button selected by the customer amongst the action buttons sent in the message. The message
''type'' must be ''reply'' for this field to be processed.
'
properties:
payload:
type: string
maxLength: 512
description: 'The payload value of the selected action button. The value must match one of the ''payload'' field
values of the action buttons sent in the message to the customer. This value will trigger the workflow to execute
the appropriate path for a ''say'' block. The value will also appear as a message sent by the customer to the
agent.
'
example: BOOK_APPOINTMENT_SERVICE_NAME
ContextMessage:
type: object
description: A message that the third-party messaging application might have shown to the customer at the start of the
conversation.
required:
- text
- timestamp
properties:
text:
type: string
description: The text of the message
maxLength: 4096
example: Welcome to the insurance helpdesk. How can I help you today?
timestamp:
type: string
format: date-time
description: The datetime when the message was shown to the customer (in ISO 8601 format including timezone, 'yyyy-MM-dd'T'HH:mm:ss[.SSS]Z')
example: '2025-10-01T12:00:00Z'
Problem:
type: object
description: 'Problem Detail as a way to carry machine-readable details of errors in a HTTP response to avoid
the need to define new error response formats for HTTP APIs RFC 7807
'
properties:
type:
type: string
format: uri
description: 'An absolute URI that identifies the problem type. When dereferenced, it SHOULD provide human-readable
documentation for the problem type (e.g., using HTML).
'
default: about:blank
example: https://developers.avayacloud.com/onecloud-ccaas/docs/error-handling#constraint-violation
title:
type: string
description: 'A short, summary of the problem type. Written in english and readable for engineers (usually not suited
for non technical stakeholders and not localized).
'
example: Service Unavailable
nullable: true
status:
type: integer
format: int32
description: 'The HTTP status code generated by the origin server for this occurrence of the problem.
'
minimum: 100
maximum: 600
exclusiveMaximum: true
example: 503
nullable: true
detail:
type: string
description: 'A human readable explanation specific to this occurrence of the problem.
'
example: Connection to database timed out
nullable: true
instance:
type: string
format: uri
description: 'An absolute URI that identifies the specific occurrence of the problem. It may or may not yield further
information if dereferenced.
'
nullable: true
violations:
type: array
description: 'A list of violations that occurred as a result of invalid data provided as part of a request.
'
nullable: true
items:
type: object
properties:
field:
type: string
description: 'The name of the field in the request that caused the violation. This can be the name of a path
parameter, query parameter, or a field within the request body.
'
example: channel
message:
type: string
description: 'A human readable explanation specific to this occurrence of the violation.
'
example: invalid channel
code:
type: integer
format: int32
description: 'The violation code generated by the server for this occurrence of the violation. Use this code
when implementing any error handling logic instead of the message, as the message can change.
'
example: 20006
example:
- field: channel
message: invalid channel
GenerateSignedUploadUri:
type: object
description: The request body for generating a signed upload URI
required:
- integrationId
- filename
- mimetype
- size
properties:
integrationId:
type: string
description: The id of the custom messaging integration
maxLength: 50
example: 07448983-7440-440d-91b1-522da9e3a9be
filename:
type: string
description: The name of the file
maxLength: 256
example: invoice_2025_11.pdf
mimetype:
type: string
description: The MIME type of the file
maxLength: 128
example: application/pdf
size:
type: integer
description: The size of the file in bytes
example: 1024
GenerateSignedDownloadUri:
type: object
description: The request body for generating a signed download URI
required:
- attachmentId
- integrationId
properties:
integrationId:
type: string
description: The id of the custom messaging integration
maxLength: 50
example: 07448983-7440-440d-91b1-522da9e3a9be
attachmentId:
type: string
description: The id of the attachment
maxLength: 50
example: 096d011105f7f98b0ac48aee4b
GenerateSignedUploadUriResponse:
type: object
description: The response body for generating a signed upload URI
properties:
uploadSignedUri:
type: string
description: The signed upload URI
GenerateSignedDownloadUriResponse:
type: object
description: The response body for generating a signed download URI
properties:
downloadSignedUri:
type: string
description: The signed download URI
securitySchemes:
BearerAuth:
type: http
scheme: bearer
description: This API uses Bearer Token Authorization Flow
bearerFormat: JWT
examples:
SendTextMessageMinimal:
value:
connectorId: 591c2529-c3a3-4062-a213-b239c18f543b
channel: text
headers:
from: '+19234567890'
to:
- '+19876543210'
destination: '+19876543210'
body:
text: Hi. I need some help on my insurance
SendTextMessageAllDetails:
value:
connectorId: 591c2529-c3a3-4062-a213-b239c18f543b
channel: text
headers:
from: '+19234567890'
to:
- '+19876543210'
destination: '+19876543210'
body:
text: Hi. I need some help on my insurance
contextParameters:
customer-interest: insurance
providerMetaData:
messageId: 611c9a6a4a250100d4bd2c54
messageTimestamp: '2025-08-15T12:00:00.000Z'
correlationId: 1234567890abcdef
SendTextMessageResponseMinimal:
value:
messageId: 004e0708206c0d3db4807g6bj7
accountId: 001a0106666e7777bb999c991d
conversationSessionId: 005e0708206c0d3db4807g6bj7
connectorId: 591c2529-c3a3-4062-a213-b239c18f543b
channel: text
headers:
from: '+19234567890'
to:
- '+19876543210'
destination: '+19876543210'
body:
text: Hi. I need some help on my insurance
SendTextMessageResponseAllDetails:
value:
messageId: 004e0708206c0d3db4807g6bj7
accountId: 001a0106666e7777bb999c991d
conversationSessionId: 005e0708206c0d3db4807g6bj7
connectorId: 591c2529-c3a3-4062-a213-b239c18f543b
channel: text
headers:
from: '+19234567890'
to:
- '+19876543210'
destination: '+19876543210'
body:
text: Hi. I need some help on my insurance
contextParameters:
customer-interest: insurance
providerMetaData:
messageId: 611c9a6a4a250100d4bd2c54
messageTimestamp: '2025-08-15T12:00:00.000Z'
correlationId: 1234567890abcdef
SendCustomMessageText:
value:
connectorId: 591c2529-c3a3-4062-a213-b239c18f543b
channel: messaging
headers:
from: johndoe123
destination: 07448983-7440-440d-91b1-522da9e3a9be
channelAddress: https://the-platform.example.com/my-page-id
channelName: the-platform
sender:
displayName: John Doe
body:
text: Hi. I need some help on my insurance
contextParameters:
customer-interest: insurance
contextMessages:
- text: Welcome to the insurance helpdesk. How can I help you today?
timestamp: '2025-10-01T12:00:00Z'
providerMetaData:
messageId: 611c9a6a4a250100d4bd2c54
messageTimestamp: '2025-08-15T12:00:00Z'
SendCustomMessageReply:
value:
connectorId: 591c2529-c3a3-4062-a213-b239c18f543b
channel: messaging
headers:
from: johndoe123
destination: 07448983-7440-440d-91b1-522da9e3a9be
channelAddress: https://the-platform.example.com/my-page-id
channelName: the-platform
sender:
displayName: John Doe
body:
type: reply
selectedAction:
payload: BOOK_APPOINTMENT_SERVICE_NAME
contextParameters:
customer-interest: insurance
providerMetaData:
messageId: 611c9a6a4a250100d4bd2c54
messageTimestamp: '2025-08-15T12:00:00Z'
SendCustomMessageImage:
value:
connectorId: 591c2529-c3a3-4062-a213-b239c18f543b
channel: messaging
headers:
from: johndoe123@gmail.com
destination: 07448983-7440-440d-91b1-522da9e3a9be
channelAddress: https://the-platform.example.com/my-page-id
channelName: the-platform
sender:
displayName: John Doe
body:
text: Here is the screenshot of the insurance details
type: file
attachmentIds:
- d4b2c3a1-8f5e-4c6b-9f0e-2a1b3c4d5e6f
contextParameters:
customer-interest: insurance
providerMetaData:
messageId: 611c9a6a4a250100d4bd2c54
messageTimestamp: '2025-08-15T12:00:00Z'
SendCustomMessageFile:
value:
connectorId: 591c2529-c3a3-4062-a213-b239c18f543b
channel: messaging
headers:
from: johndoe123
destination: 07448983-7440-440d-91b1-522da9e3a9be
channelAddress: https://the-platform.example.com/my-page-id
channelName: the-platform
sender:
displayName: John Doe
body:
text: Here is the insurance details
type: file
attachmentIds:
- d4b2c3a1-8f5e-4c6b-9f0e-2a1b3c4d5e6f
contextParameters:
customer-interest: insurance
providerMetaData:
messageId: 611c9a6a4a250100d4bd2c54
messageTimestamp: '2025-08-15T12:00:00Z'
SendCustomMessageTextResponse:
value:
messageId: 004e0708206c0d3db4807g6bj7
accountId: 001d010540de0d3db4302f5fa8
conversationSessionId: 005e0708206c0d3db4807g6bj7
connectorId: 591c2529-c3a3-4062-a213-b239c18f543b
channel: messaging
headers:
from: johndoe123
destination: 07448983-7440-440d-91b1-522da9e3a9be
channelAddress: https://the-platform.example.com/my-page-id
channelName: the-platform
sender:
displayName: John Doe
body:
text: Hi. I need some help on my insurance
contextParameters:
customer-interest: insurance
providerMetaData:
messageId: 611c9a6a4a250100d4bd2c54
messageTimestamp: '2025-08-15T12:00:00Z'
correlationId: 1234567890abcdef
SendCustomMessageReplyResponse:
value:
messageId: 004e0708206c0d3db4807g6bj7
accountId: 001d010540de0d3db4302f5fa8
conversationSessionId: 005e0708206c0d3db4807g6bj7
connectorId: 591c2529-c3a3-4062-a213-b239c18f543b
channel: messaging
headers:
from: johndoe123
destination: 07448983-7440-440d-91b1-522da9e3a9be
channelAddress: https://the-platform.example.com/my-page-id
channelName: the-platform
sender:
displayName: John Doe
body:
type: reply
selectedAction:
payload: BOOK_APPOINTMENT_SERVICE_NAME
contextParameters:
customer-interest: insurance
providerMetaData:
messageId: 611c9a6a4a250100d4bd2c54
messageTimestamp: '2025-08-15T12:00:00Z'
correlationId: 1234567890abcdef
SendCustomMessageImageResponse:
value:
messageId: 004e0708206c0d3db4807g6bj7
accountId: 001d010540de0d3db4302f5fa8
conversationSessionId: 005e0708206c0d3db4807g6bj7
connectorId: 591c2529-c3a3-4062-a213-b239c18f543b
channel: messaging
headers:
from: johndoe123
destination: 07448983-7440-440d-91b1-522da9e3a9be
channelAddress: https://the-platform.example.com/my-page-id
channelName: the-platform
sender:
displayName: John Doe
body:
text: Here is the screenshot of the insurance details
type: file
attachmentIds:
- d4b2c3a1-8f5e-4c6b-9f0e-2a1b3c4d5e6f
contextParameters:
customer-interest: insurance
providerMetaData:
messageId: 611c9a6a4a250100d4bd2c54
messageTimestamp: '2025-08-15T12:00:00Z'
correlationId: 1234567890abcdef
SendCustomMessageFileResponse:
value:
messageId: 004e0708206c0d3db4807g6bj7
accountId: 001d010540de0d3db4302f5fa8
conversationSessionId: 005e0708206c0d3db4807g6bj7
connectorId: 591c2529-c3a3-4062-a213-b239c18f543b
channel: messaging
headers:
from: johndoe123
destination: 07448983-7440-440d-91b1-522da9e3a9be
channelAddress: https://the-platform.example.com/my-page-id
channelName: the-platform
sender:
displayName: John Doe
body:
text: Here is the insurance details
type: file
attachmentIds:
- d4b2c3a1-8f5e-4c6b-9f0e-2a1b3c4d5e6f
contextParameters:
customer-interest: insurance
providerMetaData:
messageId: 611c9a6a4a250100d4bd2c54
messageTimestamp: '2025-08-15T12:00:00Z'
correlationId: 1234567890abcdef
ErrorConstraintViolation:
description: Constraint Violation
value:
type: https://developers.avayacloud.com/onecloud-ccaas/docs/error-handling#constraint-violation
title: Constraint Violation
status: 400
detail: A problem that indicates a syntactically correct, yet semantically illegal request. The Server can not process
this request until the client resolves the semantic errors described in the violations section.
violations:
- field: channel
message: invalid channel
ErrorUnauthorized:
description: Unauthorized
value:
type: https://developers.avayacloud.com/onecloud-ccaas/docs/error-handling#unauthorized
title: Unauthorized
status: 401
detail: This operation requires authentication. See https://developers.avayacloud.com/onecloud-ccaas/docs/how-to-authenticate-with-ccaas-apis
ErrorForbidden:
description: Forbidden
value:
type: https://developers.avayacloud.com/onecloud-ccaas/docs/error-handling#forbidden
title: Forbidden
status: 403
detail: According to the access control policy the current user and/or accountId does not have permission to access
this resource.
ErrorInternalServerError:
description: Internal Server Error
value:
type: https://developers.avayacloud.com/onecloud-ccaas/docs/error-handling#internal-error
title: Internal Server Error
status: 500
detail: An internal server error was encountered.
GenerateSignedUploadUri:
value:
integrationId: 07448983-7440-440d-91b1-522da9e3a9be
filename: invoice_2025_11.pdf
mimetype: application/pdf
size: 1024
GenerateSignedDownloadUri:
value:
integrationId: 07448983-7440-440d-91b1-522da9e3a9be
attachmentId: 096d011105f7f98b0ac48aee4b
GenerateSignedUploadUriResponse:
value:
uploadSignedUri: /api/digital/messaging/v1/storage/upload-sessions/5e50907f-7744-4f03-94b1-10f5b9be3d5e?hmac=2677f19d96512d21064114022aa4316a1446577ef4457670e65e0f9045b7fb4f&expiresAt=1762337157246
GenerateSignedDownloadUriResponse:
value:
downloadSignedUri: /api/digital/messaging/v1/storage/download-sessions/096d011105f7f98b0ac48aee4b?hmac=2677f19d96512d21064114022aa4316a1446577ef4457670e65e0f9045b7fb4f&expiresAt=1762337157246