feat(foundation): text/plain is parsed as JSON for data.api, 400 if not an object