The Transmissions API supports substitution data, metadata and tags are the recipient level, but there's no explanation of how to do this in the documentation. Only this text in https://python-sparkpost.readthedocs.io/en/latest/resources/transmissions.html :
Substitution data can be specified at the template, transmission and recipient levels. The order of precedence is as follows: recipient overrides transmission overrides template.
For reference, substitution data is supported by passing in a dictionary to the send method. E.g.:
response = sp.transmissions.send(
...
recipients = [
{
'address': { 'email': 'recipient@somewhere.example' },
'substitution_data': { 'name': 'Rachael' }
}
],
...
)
The same may work for metadata and tags, but I have not tested that (yet).
I'm using version 1.3.5.