Is it possible to create a list where you can add items to a list but not view items in a list?
It's possible to create RoleDefinition with "Add Items" base permission only like this (CSOM):
var context = new ClientContext(siteURL);
var permissions = new BasePermissions();
var roleDefCI = new RoleDefinitionCreationInformation();
roleDefCI.BasePermissions = permissions;
roleDefCI.Name = "Add Only";
roleDefCI.Description = "Allow only Add Items";
var roleDef = context.Web.RoleDefinitions.Add(roleDefCI);
Assign only this permission level to user on list (user still should have Read access on Web/Parent).
You have to set all needed field values prior to update call, because after item created you wouldn't be able even to get the ID of created item. ExecuteQuery will throw an error that item was deleted, but item will be created.
A bit of a hack, but might be useful in some situations. Use with caution.