I do not think a task queue is the proper way because this is a process with side-effect that will not be really transactional. For me, it is very similar to account_fr_chorus
which uses a cron because it retries automatically on failure and commit after each successful sent.
I would prefer like for Chorus to have a separate model to store communication data.
What is the workflow behind those states?
Did not they reuse an existing codification?
I think it is better stored on the account.configuration.
Do they provide a staging server for testing?
I prefer to store keys on the file system and get them via configuration because it is sensitive information that should not be part of the backup. And they may need to be renewed by an automatic service like “Let’s encrypt”.