Are you saying the calls to the API differ from what you gather using the UI? That should be a solvable problem because the UI uses the API.
Your model looks good. Let's look at a similar example using instacart data [1].
Nearly everyone buys milk, strawberries and bananas. These are the top products.
So if you search for people who bought "pasta" and have significance turned off you will recommend ..... milk, strawberries and bananas as an accompaniment:
However, if you have significant links turned on you get italian sauce
and related:
So it can work on this shape of data but does depend on having a reasonable amount of it and there being some cohesion to the products (pasta and italian sauce tend to go together like Black Sabbath and Motorhead). Also I generally tend to use one shard if possible to keep the all the signal in one place.
[1] 3 Million Instacart Orders, Open Sourced | by Jeremy Stanley | tech-at-instacart