diff -pruN 1.11.0-1/CHANGELOG.md 1.13.0-1/CHANGELOG.md
--- 1.11.0-1/CHANGELOG.md	2025-03-05 20:41:02.000000000 +0000
+++ 1.13.0-1/CHANGELOG.md	2025-08-11 10:03:27.000000000 +0000
@@ -2,6 +2,26 @@
 
 ## NOT RELEASED
 
+## 1.13.0
+
+### Added
+
+- AWS api-change: This release introduces support for Multi-tenant management
+
+### Changed
+
+- AWS enhancement: Documentation updates.
+
+## 1.12.0
+
+### Added
+
+- AWS api-change: This release enables customers to provide attachments in the SESv2 SendEmail and SendBulkEmail APIs.
+
+### Changed
+
+- Sort exception alphabetically.
+
 ## 1.11.0
 
 ### Added
diff -pruN 1.11.0-1/composer.json 1.13.0-1/composer.json
--- 1.11.0-1/composer.json	2025-03-05 20:41:02.000000000 +0000
+++ 1.13.0-1/composer.json	2025-08-11 10:03:27.000000000 +0000
@@ -27,7 +27,7 @@
     },
     "extra": {
         "branch-alias": {
-            "dev-master": "1.11-dev"
+            "dev-master": "1.13-dev"
         }
     }
 }
diff -pruN 1.11.0-1/debian/changelog 1.13.0-1/debian/changelog
--- 1.11.0-1/debian/changelog	2025-03-08 14:47:27.000000000 +0000
+++ 1.13.0-1/debian/changelog	2025-08-12 11:17:48.000000000 +0000
@@ -1,3 +1,25 @@
+php-async-aws-ses (1.13.0-1) unstable; urgency=medium
+
+  * Upload to unstable now that Trixie has been released
+
+  [ Christian Flothmann ]
+  * do not call setAccessible() on PHP 8.1+ (#1931)
+
+  [ Jérémy Derussé ]
+  * prepare next release (#1932)
+
+ -- David Prévot <taffit@debian.org>  Tue, 12 Aug 2025 13:17:48 +0200
+
+php-async-aws-ses (1.12.0-1) experimental; urgency=medium
+
+  * Upload to experimental during the freeze
+
+  [ Jérémy Derussé ]
+  * Sort exceptions alphabetically (#1875)
+  * Prepeare release
+
+ -- David Prévot <taffit@debian.org>  Mon, 12 May 2025 18:42:36 +0200
+
 php-async-aws-ses (1.11.0-1) unstable; urgency=medium
 
   [ Jordi Boggiano ]
diff -pruN 1.11.0-1/src/Enum/AttachmentContentDisposition.php 1.13.0-1/src/Enum/AttachmentContentDisposition.php
--- 1.11.0-1/src/Enum/AttachmentContentDisposition.php	1970-01-01 00:00:00.000000000 +0000
+++ 1.13.0-1/src/Enum/AttachmentContentDisposition.php	2025-08-11 10:03:27.000000000 +0000
@@ -0,0 +1,17 @@
+<?php
+
+namespace AsyncAws\Ses\Enum;
+
+final class AttachmentContentDisposition
+{
+    public const ATTACHMENT = 'ATTACHMENT';
+    public const INLINE = 'INLINE';
+
+    public static function exists(string $value): bool
+    {
+        return isset([
+            self::ATTACHMENT => true,
+            self::INLINE => true,
+        ][$value]);
+    }
+}
diff -pruN 1.11.0-1/src/Enum/AttachmentContentTransferEncoding.php 1.13.0-1/src/Enum/AttachmentContentTransferEncoding.php
--- 1.11.0-1/src/Enum/AttachmentContentTransferEncoding.php	1970-01-01 00:00:00.000000000 +0000
+++ 1.13.0-1/src/Enum/AttachmentContentTransferEncoding.php	2025-08-11 10:03:27.000000000 +0000
@@ -0,0 +1,19 @@
+<?php
+
+namespace AsyncAws\Ses\Enum;
+
+final class AttachmentContentTransferEncoding
+{
+    public const BASE64 = 'BASE64';
+    public const QUOTED_PRINTABLE = 'QUOTED_PRINTABLE';
+    public const SEVEN_BIT = 'SEVEN_BIT';
+
+    public static function exists(string $value): bool
+    {
+        return isset([
+            self::BASE64 => true,
+            self::QUOTED_PRINTABLE => true,
+            self::SEVEN_BIT => true,
+        ][$value]);
+    }
+}
diff -pruN 1.11.0-1/src/Input/SendEmailRequest.php 1.13.0-1/src/Input/SendEmailRequest.php
--- 1.11.0-1/src/Input/SendEmailRequest.php	2025-03-05 20:41:02.000000000 +0000
+++ 1.13.0-1/src/Input/SendEmailRequest.php	2025-08-11 10:03:27.000000000 +0000
@@ -122,6 +122,16 @@ final class SendEmailRequest extends Inp
     private $endpointId;
 
     /**
+     * The name of the tenant through which this email will be sent.
+     *
+     * > The email sending operation will only succeed if all referenced resources (identities, configuration sets, and
+     * > templates) are associated with this tenant.
+     *
+     * @var string|null
+     */
+    private $tenantName;
+
+    /**
      * An object used to specify a list or topic to which an email belongs, which will be used when a contact chooses to
      * unsubscribe.
      *
@@ -141,6 +151,7 @@ final class SendEmailRequest extends Inp
      *   EmailTags?: null|array<MessageTag|array>,
      *   ConfigurationSetName?: null|string,
      *   EndpointId?: null|string,
+     *   TenantName?: null|string,
      *   ListManagementOptions?: null|ListManagementOptions|array,
      *   '@region'?: string|null,
      * } $input
@@ -157,6 +168,7 @@ final class SendEmailRequest extends Inp
         $this->emailTags = isset($input['EmailTags']) ? array_map([MessageTag::class, 'create'], $input['EmailTags']) : null;
         $this->configurationSetName = $input['ConfigurationSetName'] ?? null;
         $this->endpointId = $input['EndpointId'] ?? null;
+        $this->tenantName = $input['TenantName'] ?? null;
         $this->listManagementOptions = isset($input['ListManagementOptions']) ? ListManagementOptions::create($input['ListManagementOptions']) : null;
         parent::__construct($input);
     }
@@ -173,6 +185,7 @@ final class SendEmailRequest extends Inp
      *   EmailTags?: null|array<MessageTag|array>,
      *   ConfigurationSetName?: null|string,
      *   EndpointId?: null|string,
+     *   TenantName?: null|string,
      *   ListManagementOptions?: null|ListManagementOptions|array,
      *   '@region'?: string|null,
      * }|SendEmailRequest $input
@@ -243,6 +256,11 @@ final class SendEmailRequest extends Inp
         return $this->replyToAddresses ?? [];
     }
 
+    public function getTenantName(): ?string
+    {
+        return $this->tenantName;
+    }
+
     /**
      * @internal
      */
@@ -351,6 +369,13 @@ final class SendEmailRequest extends Inp
         return $this;
     }
 
+    public function setTenantName(?string $value): self
+    {
+        $this->tenantName = $value;
+
+        return $this;
+    }
+
     private function requestBody(): array
     {
         $payload = [];
@@ -395,6 +420,9 @@ final class SendEmailRequest extends Inp
         if (null !== $v = $this->endpointId) {
             $payload['EndpointId'] = $v;
         }
+        if (null !== $v = $this->tenantName) {
+            $payload['TenantName'] = $v;
+        }
         if (null !== $v = $this->listManagementOptions) {
             $payload['ListManagementOptions'] = $v->requestBody();
         }
diff -pruN 1.11.0-1/src/SesClient.php 1.13.0-1/src/SesClient.php
--- 1.11.0-1/src/SesClient.php	2025-03-05 20:41:02.000000000 +0000
+++ 1.13.0-1/src/SesClient.php	2025-08-11 10:03:27.000000000 +0000
@@ -39,16 +39,16 @@ class SesClient extends AbstractApi
      *   '@region'?: string|null,
      * }|DeleteSuppressedDestinationRequest $input
      *
-     * @throws NotFoundException
      * @throws BadRequestException
+     * @throws NotFoundException
      * @throws TooManyRequestsException
      */
     public function deleteSuppressedDestination($input): DeleteSuppressedDestinationResponse
     {
         $input = DeleteSuppressedDestinationRequest::create($input);
         $response = $this->getResponse($input->request(), new RequestContext(['operation' => 'DeleteSuppressedDestination', 'region' => $input->getRegion(), 'exceptionMapping' => [
-            'NotFoundException' => NotFoundException::class,
             'BadRequestException' => BadRequestException::class,
+            'NotFoundException' => NotFoundException::class,
             'TooManyRequestsException' => TooManyRequestsException::class,
         ]]));
 
@@ -67,16 +67,16 @@ class SesClient extends AbstractApi
      * }|GetSuppressedDestinationRequest $input
      *
      * @throws BadRequestException
-     * @throws TooManyRequestsException
      * @throws NotFoundException
+     * @throws TooManyRequestsException
      */
     public function getSuppressedDestination($input): GetSuppressedDestinationResponse
     {
         $input = GetSuppressedDestinationRequest::create($input);
         $response = $this->getResponse($input->request(), new RequestContext(['operation' => 'GetSuppressedDestination', 'region' => $input->getRegion(), 'exceptionMapping' => [
             'BadRequestException' => BadRequestException::class,
-            'TooManyRequestsException' => TooManyRequestsException::class,
             'NotFoundException' => NotFoundException::class,
+            'TooManyRequestsException' => TooManyRequestsException::class,
         ]]));
 
         return new GetSuppressedDestinationResponse($response);
@@ -107,31 +107,32 @@ class SesClient extends AbstractApi
      *   EmailTags?: null|array<MessageTag|array>,
      *   ConfigurationSetName?: null|string,
      *   EndpointId?: null|string,
+     *   TenantName?: null|string,
      *   ListManagementOptions?: null|ListManagementOptions|array,
      *   '@region'?: string|null,
      * }|SendEmailRequest $input
      *
-     * @throws TooManyRequestsException
-     * @throws LimitExceededException
      * @throws AccountSuspendedException
-     * @throws SendingPausedException
-     * @throws MessageRejectedException
+     * @throws BadRequestException
+     * @throws LimitExceededException
      * @throws MailFromDomainNotVerifiedException
+     * @throws MessageRejectedException
      * @throws NotFoundException
-     * @throws BadRequestException
+     * @throws SendingPausedException
+     * @throws TooManyRequestsException
      */
     public function sendEmail($input): SendEmailResponse
     {
         $input = SendEmailRequest::create($input);
         $response = $this->getResponse($input->request(), new RequestContext(['operation' => 'SendEmail', 'region' => $input->getRegion(), 'exceptionMapping' => [
-            'TooManyRequestsException' => TooManyRequestsException::class,
-            'LimitExceededException' => LimitExceededException::class,
             'AccountSuspendedException' => AccountSuspendedException::class,
-            'SendingPausedException' => SendingPausedException::class,
-            'MessageRejected' => MessageRejectedException::class,
+            'BadRequestException' => BadRequestException::class,
+            'LimitExceededException' => LimitExceededException::class,
             'MailFromDomainNotVerifiedException' => MailFromDomainNotVerifiedException::class,
+            'MessageRejected' => MessageRejectedException::class,
             'NotFoundException' => NotFoundException::class,
-            'BadRequestException' => BadRequestException::class,
+            'SendingPausedException' => SendingPausedException::class,
+            'TooManyRequestsException' => TooManyRequestsException::class,
         ]]));
 
         return new SendEmailResponse($response);
diff -pruN 1.11.0-1/src/ValueObject/Attachment.php 1.13.0-1/src/ValueObject/Attachment.php
--- 1.11.0-1/src/ValueObject/Attachment.php	1970-01-01 00:00:00.000000000 +0000
+++ 1.13.0-1/src/ValueObject/Attachment.php	2025-08-11 10:03:27.000000000 +0000
@@ -0,0 +1,192 @@
+<?php
+
+namespace AsyncAws\Ses\ValueObject;
+
+use AsyncAws\Core\Exception\InvalidArgument;
+use AsyncAws\Ses\Enum\AttachmentContentDisposition;
+use AsyncAws\Ses\Enum\AttachmentContentTransferEncoding;
+
+/**
+ * Contains metadata and attachment raw content.
+ */
+final class Attachment
+{
+    /**
+     * The raw data of the attachment. It needs to be base64-encoded if you are accessing Amazon SES directly through the
+     * HTTPS interface. If you are accessing Amazon SES using an Amazon Web Services SDK, the SDK takes care of the base
+     * 64-encoding for you.
+     *
+     * @var string
+     */
+    private $rawContent;
+
+    /**
+     * A standard descriptor indicating how the attachment should be rendered in the email. Supported values: `ATTACHMENT`
+     * or `INLINE`.
+     *
+     * @var AttachmentContentDisposition::*|null
+     */
+    private $contentDisposition;
+
+    /**
+     * The file name for the attachment as it will appear in the email. Amazon SES restricts certain file extensions. To
+     * ensure attachments are accepted, check the Unsupported attachment types [^1] in the Amazon SES Developer Guide.
+     *
+     * [^1]: https://docs.aws.amazon.com/ses/latest/dg/mime-types.html
+     *
+     * @var string
+     */
+    private $fileName;
+
+    /**
+     * A brief description of the attachment content.
+     *
+     * @var string|null
+     */
+    private $contentDescription;
+
+    /**
+     * Unique identifier for the attachment, used for referencing attachments with INLINE disposition in HTML content.
+     *
+     * @var string|null
+     */
+    private $contentId;
+
+    /**
+     * Specifies how the attachment is encoded. Supported values: `BASE64`, `QUOTED_PRINTABLE`, `SEVEN_BIT`.
+     *
+     * @var AttachmentContentTransferEncoding::*|null
+     */
+    private $contentTransferEncoding;
+
+    /**
+     * The MIME type of the attachment.
+     *
+     * > Example: `application/pdf`, `image/jpeg`
+     *
+     * @var string|null
+     */
+    private $contentType;
+
+    /**
+     * @param array{
+     *   RawContent: string,
+     *   ContentDisposition?: null|AttachmentContentDisposition::*,
+     *   FileName: string,
+     *   ContentDescription?: null|string,
+     *   ContentId?: null|string,
+     *   ContentTransferEncoding?: null|AttachmentContentTransferEncoding::*,
+     *   ContentType?: null|string,
+     * } $input
+     */
+    public function __construct(array $input)
+    {
+        $this->rawContent = $input['RawContent'] ?? $this->throwException(new InvalidArgument('Missing required field "RawContent".'));
+        $this->contentDisposition = $input['ContentDisposition'] ?? null;
+        $this->fileName = $input['FileName'] ?? $this->throwException(new InvalidArgument('Missing required field "FileName".'));
+        $this->contentDescription = $input['ContentDescription'] ?? null;
+        $this->contentId = $input['ContentId'] ?? null;
+        $this->contentTransferEncoding = $input['ContentTransferEncoding'] ?? null;
+        $this->contentType = $input['ContentType'] ?? null;
+    }
+
+    /**
+     * @param array{
+     *   RawContent: string,
+     *   ContentDisposition?: null|AttachmentContentDisposition::*,
+     *   FileName: string,
+     *   ContentDescription?: null|string,
+     *   ContentId?: null|string,
+     *   ContentTransferEncoding?: null|AttachmentContentTransferEncoding::*,
+     *   ContentType?: null|string,
+     * }|Attachment $input
+     */
+    public static function create($input): self
+    {
+        return $input instanceof self ? $input : new self($input);
+    }
+
+    public function getContentDescription(): ?string
+    {
+        return $this->contentDescription;
+    }
+
+    /**
+     * @return AttachmentContentDisposition::*|null
+     */
+    public function getContentDisposition(): ?string
+    {
+        return $this->contentDisposition;
+    }
+
+    public function getContentId(): ?string
+    {
+        return $this->contentId;
+    }
+
+    /**
+     * @return AttachmentContentTransferEncoding::*|null
+     */
+    public function getContentTransferEncoding(): ?string
+    {
+        return $this->contentTransferEncoding;
+    }
+
+    public function getContentType(): ?string
+    {
+        return $this->contentType;
+    }
+
+    public function getFileName(): string
+    {
+        return $this->fileName;
+    }
+
+    public function getRawContent(): string
+    {
+        return $this->rawContent;
+    }
+
+    /**
+     * @internal
+     */
+    public function requestBody(): array
+    {
+        $payload = [];
+        $v = $this->rawContent;
+        $payload['RawContent'] = base64_encode($v);
+        if (null !== $v = $this->contentDisposition) {
+            if (!AttachmentContentDisposition::exists($v)) {
+                throw new InvalidArgument(\sprintf('Invalid parameter "ContentDisposition" for "%s". The value "%s" is not a valid "AttachmentContentDisposition".', __CLASS__, $v));
+            }
+            $payload['ContentDisposition'] = $v;
+        }
+        $v = $this->fileName;
+        $payload['FileName'] = $v;
+        if (null !== $v = $this->contentDescription) {
+            $payload['ContentDescription'] = $v;
+        }
+        if (null !== $v = $this->contentId) {
+            $payload['ContentId'] = $v;
+        }
+        if (null !== $v = $this->contentTransferEncoding) {
+            if (!AttachmentContentTransferEncoding::exists($v)) {
+                throw new InvalidArgument(\sprintf('Invalid parameter "ContentTransferEncoding" for "%s". The value "%s" is not a valid "AttachmentContentTransferEncoding".', __CLASS__, $v));
+            }
+            $payload['ContentTransferEncoding'] = $v;
+        }
+        if (null !== $v = $this->contentType) {
+            $payload['ContentType'] = $v;
+        }
+
+        return $payload;
+    }
+
+    /**
+     * @return never
+     */
+    private function throwException(\Throwable $exception)
+    {
+        throw $exception;
+    }
+}
diff -pruN 1.11.0-1/src/ValueObject/EmailContent.php 1.13.0-1/src/ValueObject/EmailContent.php
--- 1.11.0-1/src/ValueObject/EmailContent.php	2025-03-05 20:41:02.000000000 +0000
+++ 1.13.0-1/src/ValueObject/EmailContent.php	2025-08-11 10:03:27.000000000 +0000
@@ -3,15 +3,15 @@
 namespace AsyncAws\Ses\ValueObject;
 
 /**
- * An object that defines the entire content of the email, including the message headers and the body content. You can
- * create a simple email message, in which you specify the subject and the text and HTML versions of the message body.
- * You can also create raw messages, in which you specify a complete MIME-formatted message. Raw messages can include
- * attachments and custom headers.
+ * An object that defines the entire content of the email, including the message headers, body content, and attachments.
+ * For a simple email message, you specify the subject and provide both text and HTML versions of the message body. You
+ * can also add attachments to simple and templated messages. For a raw message, you provide a complete MIME-formatted
+ * message, which can include custom headers and attachments.
  */
 final class EmailContent
 {
     /**
-     * The simple email message. The message consists of a subject and a message body.
+     * The simple email message. The message consists of a subject, message body and attachments list.
      *
      * @var Message|null
      */
diff -pruN 1.11.0-1/src/ValueObject/Message.php 1.13.0-1/src/ValueObject/Message.php
--- 1.11.0-1/src/ValueObject/Message.php	2025-03-05 20:41:02.000000000 +0000
+++ 1.13.0-1/src/ValueObject/Message.php	2025-08-11 10:03:27.000000000 +0000
@@ -34,10 +34,18 @@ final class Message
     private $headers;
 
     /**
+     * The List of attachments to include in your email. All recipients will receive the same attachments.
+     *
+     * @var Attachment[]|null
+     */
+    private $attachments;
+
+    /**
      * @param array{
      *   Subject: Content|array,
      *   Body: Body|array,
      *   Headers?: null|array<MessageHeader|array>,
+     *   Attachments?: null|array<Attachment|array>,
      * } $input
      */
     public function __construct(array $input)
@@ -45,6 +53,7 @@ final class Message
         $this->subject = isset($input['Subject']) ? Content::create($input['Subject']) : $this->throwException(new InvalidArgument('Missing required field "Subject".'));
         $this->body = isset($input['Body']) ? Body::create($input['Body']) : $this->throwException(new InvalidArgument('Missing required field "Body".'));
         $this->headers = isset($input['Headers']) ? array_map([MessageHeader::class, 'create'], $input['Headers']) : null;
+        $this->attachments = isset($input['Attachments']) ? array_map([Attachment::class, 'create'], $input['Attachments']) : null;
     }
 
     /**
@@ -52,6 +61,7 @@ final class Message
      *   Subject: Content|array,
      *   Body: Body|array,
      *   Headers?: null|array<MessageHeader|array>,
+     *   Attachments?: null|array<Attachment|array>,
      * }|Message $input
      */
     public static function create($input): self
@@ -59,6 +69,14 @@ final class Message
         return $input instanceof self ? $input : new self($input);
     }
 
+    /**
+     * @return Attachment[]
+     */
+    public function getAttachments(): array
+    {
+        return $this->attachments ?? [];
+    }
+
     public function getBody(): Body
     {
         return $this->body;
@@ -95,6 +113,14 @@ final class Message
                 $payload['Headers'][$index] = $listValue->requestBody();
             }
         }
+        if (null !== $v = $this->attachments) {
+            $index = -1;
+            $payload['Attachments'] = [];
+            foreach ($v as $listValue) {
+                ++$index;
+                $payload['Attachments'][$index] = $listValue->requestBody();
+            }
+        }
 
         return $payload;
     }
diff -pruN 1.11.0-1/src/ValueObject/Template.php 1.13.0-1/src/ValueObject/Template.php
--- 1.11.0-1/src/ValueObject/Template.php	2025-03-05 20:41:02.000000000 +0000
+++ 1.13.0-1/src/ValueObject/Template.php	2025-08-11 10:03:27.000000000 +0000
@@ -11,8 +11,8 @@ namespace AsyncAws\Ses\ValueObject;
 final class Template
 {
     /**
-     * The name of the template. You will refer to this name when you send email using the `SendTemplatedEmail` or
-     * `SendBulkTemplatedEmail` operations.
+     * The name of the template. You will refer to this name when you send email using the `SendEmail` or `SendBulkEmail`
+     * operations.
      *
      * @var string|null
      */
@@ -52,12 +52,20 @@ final class Template
     private $headers;
 
     /**
+     * The List of attachments to include in your email. All recipients will receive the same attachments.
+     *
+     * @var Attachment[]|null
+     */
+    private $attachments;
+
+    /**
      * @param array{
      *   TemplateName?: null|string,
      *   TemplateArn?: null|string,
      *   TemplateContent?: null|EmailTemplateContent|array,
      *   TemplateData?: null|string,
      *   Headers?: null|array<MessageHeader|array>,
+     *   Attachments?: null|array<Attachment|array>,
      * } $input
      */
     public function __construct(array $input)
@@ -67,6 +75,7 @@ final class Template
         $this->templateContent = isset($input['TemplateContent']) ? EmailTemplateContent::create($input['TemplateContent']) : null;
         $this->templateData = $input['TemplateData'] ?? null;
         $this->headers = isset($input['Headers']) ? array_map([MessageHeader::class, 'create'], $input['Headers']) : null;
+        $this->attachments = isset($input['Attachments']) ? array_map([Attachment::class, 'create'], $input['Attachments']) : null;
     }
 
     /**
@@ -76,6 +85,7 @@ final class Template
      *   TemplateContent?: null|EmailTemplateContent|array,
      *   TemplateData?: null|string,
      *   Headers?: null|array<MessageHeader|array>,
+     *   Attachments?: null|array<Attachment|array>,
      * }|Template $input
      */
     public static function create($input): self
@@ -84,6 +94,14 @@ final class Template
     }
 
     /**
+     * @return Attachment[]
+     */
+    public function getAttachments(): array
+    {
+        return $this->attachments ?? [];
+    }
+
+    /**
      * @return MessageHeader[]
      */
     public function getHeaders(): array
@@ -137,6 +155,14 @@ final class Template
                 $payload['Headers'][$index] = $listValue->requestBody();
             }
         }
+        if (null !== $v = $this->attachments) {
+            $index = -1;
+            $payload['Attachments'] = [];
+            foreach ($v as $listValue) {
+                ++$index;
+                $payload['Attachments'][$index] = $listValue->requestBody();
+            }
+        }
 
         return $payload;
     }
diff -pruN 1.11.0-1/tests/Unit/SesClientTest.php 1.13.0-1/tests/Unit/SesClientTest.php
--- 1.11.0-1/tests/Unit/SesClientTest.php	2025-03-05 20:41:02.000000000 +0000
+++ 1.13.0-1/tests/Unit/SesClientTest.php	2025-08-11 10:03:27.000000000 +0000
@@ -159,7 +159,9 @@ class SesClientTest extends TestCase
         $ses = new SesClient([], new NullProvider());
         $refl = new \ReflectionClass($ses);
         $method = $refl->getMethod('getEndpointMetadata');
-        $method->setAccessible(true);
+        if (\PHP_VERSION_ID < 80100) {
+            $method->setAccessible(true);
+        }
         $data = $method->invokeArgs($ses, ['eu-central-1']);
 
         self::assertEquals('ses', $data['signService']);
