Thanks for thinking of me Diego. I'm sorry, I do not know a way to check states via the API. It has been a while since I toyed with the API. Perhaps you can set each state based on the visual so it won't get a null?
Your solution sounds similar to what I do with a .Net web application. I call the Tableau visual with a trusted ticket and pass parameters to customize the view. The interface around the visual is controlled by my .Net code. Reporting exports can be available via the .Net code to SQL stored procs, but this doesn't take advantage of what Tableau has to obtain its display.