When a new Tile registers with your service you're passed a code you can exchange for an OAuth token. Jive Platform Data Flows and Sequence Diagrams (REST/JSON) is an excellent breakdown of the data flow for anyone who is interested.
This code exchange process requires:
When you have an Add-On registration you get the clientId & clientSecret - great!
When the Tile registers you get the code - Awesome!
But how do you tie the Tile to the AddOn? There is no clientId sent with the Tile registration.
The add-on service "/api/core/v3/tiles/..." gives you the definition endpoint "/api/core/v3/tileDefs/..." which can get the clientId from.
You can't access this endpoint without an OAuth token though, and to get an OAuth token you need to exchange the Tile code. tenantID is passed, but this is only useful in identifying the Jive instance, not the Add-On.
What am I missing?
The answer was so obvious: It's in the headers.