Field/entry data isn't really related to a module in EE, so it never know what to do with what you've passed it. Fields aren't part of modules, their fieldtypes, so you may need to rethink your approach and include a fieldtype along with your module.
How is your data held? Is it cross referenced in another table, or are you storing in the normal way inside channel_data automatically?
If it's the normal straight forward way, then fields aren't referenced by their field name, but their field ID, typically "field_id_x", then there's a lookup to exp_channel_fields table on the field_id to get the name or reference name (in your case "opportunity_id_token").
Depending on where the data came from that you want to set you may need to hard code (or via settings) what the field is (either ID, or name and do a lookup to find the ID). Or you could do a lookup to see which field is associated with your fieldtype (assumes only 1 field would ever use your fieldtype), then add that reference to your array:
// Build data array
$data = array(
'author_id' => $member_id, // Member ID
'title' => $title,
'entry_date' => $date,
'field_id_xx' => $opportunity_id_token, // Giving Opportunity token
submit_new_entry is being depreciated as of EE v2.6, you should use
save_entry instead. Ref There are also examples referencing the field IDs in that link.
If you want to associate data relating to an entry in your own table - so the Giving Opportunity token isn't shown on the Control Panel edit/publish entries pages, but kept separate - then this could be done purely in your module. All you'd need to do is once you've created the entry (with basic details) via the API, use:
To get the entry just created via the API. then save your module data in your own table cross-referencing the entry_id.