API.action takes normalized schemas