In case anyone has a similar problem.
I was calling SetSMSAttributes and Publish on each request, to set the transaction type. However SetSMSAttributes has a much lower limit per second, and does not need to be called on each request for that purpose. Instead you can use MessageAttributes on the Publish request.
'MessageAttributes' => [
'AWS.SNS.SMS.SMSType' => [
'DataType' => 'String',
'StringValue' => 'Transactional'
Unable to send SMS through AWS SNS?asked 2 months ago
SNS block send SMS for specific countriesasked 5 months ago
SMS not received from SNSasked 8 months ago
Why SNS is unable to send SMS to a specific Telecom?asked 10 months ago
Not able to send sms(Text messages) through api to USA region using csharp dotnetasked a year ago
SMS charges via SNS 20X high then actualAccepted Answerasked a year ago
AWS SNS - Unable to send SMSasked 5 months ago
Can not send sms containing urlasked 7 months ago
AWS Pinpoint/SNS: Two-way SMS unsubscribe/resubscribe implementationAccepted Answerasked 2 years ago
SNS error - SMS "Rate exceeded" after 3 messagesasked 2 years ago