Escritas

Não existe endpoint separado para criar e para atualizar. Todo envio é um POST no tipo do recurso, e o que decide entre criar e atualizar é o identificador.

Upsert por identificador

Todo recurso carrega um ou mais identifier, cada um com system (o namespace, uma URI que identifica o seu sistema) e value (a chave daquele registro no seu sistema):

1{
2 "resourceType": "Patient",
3 "identifier": [
4 {
5 "system": "https://www.acmesaude.com.br/integracao/paciente/",
6 "value": "507823709"
7 }
8 ]
9}

Se já existir um recurso com aquele identificador, ele é atualizado. Se não existir, é criado. Reenviar o mesmo payload duas vezes não gera duplicata — é o que torna a integração segura para reprocessamento.

Mantenha o system estável ao longo do tempo. Trocar o system de um paciente já integrado faz a Nilo tratá-lo como um paciente novo, e o histórico fica partido em dois registros.

O que a API devolve

A escrita é síncrona: o processamento já terminou quando a resposta chega, e o corpo da resposta é o recurso gravado.

StatusSignificado
200Gravado. O corpo é o recurso FHIR resultante, já com id e meta.versionId.
204Processado, sem recurso a devolver — é o caso das operações de remoção lógica.
400Rejeitado. O corpo é um OperationOutcome com o motivo.
429Limite de escrita atingido para aquele tipo de recurso.

A validação acontece antes da gravação. Um payload que não passa na validação FHIR é recusado sem criar nada.

Várias escritas de uma vez

Para agrupar várias escritas numa requisição só — inclusive criando um recurso e outro que o referencia no mesmo envio —, veja Carga em lote.

Para ser avisado quando um recurso mudar, em vez de consultar, veja Webhooks.

Versionamento

Toda escrita bem-sucedida gera um novo meta.versionId no recurso. As versões anteriores continuam legíveis, o que permite auditar o que mudou e quando:

$curl --request GET \
> --url https://landing-zone-api.nilo.services/fhir/resources/Patient/ba200cfa-dae0-46cf-81a0-008e3f7414b4/_history/MTc4NjAyMTQ1MjkwNTAwMDM2Nw \
> --header 'x-api-key: SUA_API_KEY'

O versionId é opaco — a codificação em base64 do instante da gravação, em nanossegundos. Não é sequencial: guarde o valor devolvido em cada escrita se quiser poder reler aquela versão depois. Veja Histórico de versões.