Cualquier código de error HTTP sería inapropiado. No hay ningún error o problema de ningún tipo desde una perspectiva HTTP, por lo que debería ser algo en el rango de 200. Informa educadamente a algunos de sus usuarios que no serán atendidos mediante el envío de un documento que se lo indique. Y todo esto va bien.
El usuario no podrá usar su aplicación . Esa es una decisión consciente tomada por la lógica de su negocio, no un contratiempo. En el nivel HTTP, todo es honky dory.
Editar
Parece que lo que estamos viendo aquí es un choque entre la vieja escuela y la nueva. Cuando se diseñó HTTP, no había servicios web, no había principios SOAP, JSON, REST. Como un protocolo por encima de TCP, esto ya se consideraba (cercano) al nivel de aplicación y se definieron muchos códigos de estado de alto nivel. Cuando la web comenzó a usarse para servicios más ricos y de alto nivel y se requería un medio común para transportar "sobres", los diseñadores utilizaron HTTP en lugar de definir un protocolo más nuevo y limpio, solo porque HTTP era ubicuo.
Por lo tanto, en un contexto de servicio web moderno, HTTP es de hecho poco más que una capa de transporte tonta y la mayoría de sus códigos pueden considerarse no aplicables u obsoletos. Solo elijo uno porque se acerca al estado de su aplicación y está en esa lista que alguna vez significó que algo puede parecer inofensivo, pero creo que enviaría un mensaje incorrecto. No desea que HTTP desempeñe ese papel regulador en un contexto de servicio web.