muito obrigado pela explicação, mas o meu questionamento foi referente ao status de retorno, não deveria ser algum outro ao invés de 999? E a mensagem de validação poderia ficar exposta em alguma chave do json ou eu teria que tratar o retorno para obter essa mensagem?
Como a validação do XML da nota não passou, não foi possível transmiti-la à SEFAZ e seu status foi alterado para erro. Esse é um estado final e indica que a Nuvem Fiscal não mais a processará. Vale ressaltar que essa mensagem de erro não é da SEFAZ (a nota nem chegou a ser enviada) e sim da própria Nuvem Fiscal. Nesse caso, você deve enviar um novo pedido de emissão com os dados corrigidos para que haja uma nova tentativa de emissão.
Com relação à mensagem de validação, ela já é disponibilizada no JSON ao consultar a nota pelo seu id. Foi justamente essa mensagem que li na sua primeira postagem. Não entendi muito bem essa sua dúvida, poderia explicar melhor?
O erro foi mesmo da minha aplicação, o ncm enviado não possuía 8 caracteres, mas como a api de vocês não retornou ValidationFailed, a aplicação entendeu que o json era válido e que o processo de emissão ocorreria, mas como os dados não eram válidos, a nuvem me retornou essa mensagem, que eu não havia visto previamente em outros testes, por isso o meu estranhamento.
Nós iremos melhorar a validação de mais campos, como esse do NCM, para retornarem ValidationFailed. Realmente seria bem melhor.
Entretanto, por mais que a gente valide todos os campos no momento de recepcionar o JSON enviado para a API, você não pode concluir que a emissão foi finalizada apenas pelo fato da requisição com o pedido de emissão ter sido aceita. Como a emissão é assíncrona, diversos outros erros podem ocorrer durante o processamento pela Nuvem Fiscal (erros na validação do XML, erros de conexão com a SEFAZ, etc). Portanto, é necessário consultar a nota posteriormente para verificar qual foi o resultado da emissão e saber em que status a nota se encontra.