API REST
POST /v1/patients
Cria um paciente
/v1/patients Sela record sob security_group e cria o paciente com a primeira versão.
Corpo da requisição #
-
recordobject obrigatórioO fluxo `data` de um paciente (`PatientData` no app web) — tudo aqui é selado antes do upload. `birth_date` aceita `date` ou `datetime` com fuso e é gravado do jeito que o app web grava, como um instante ISO 8601 em UTC. Defina `Settings.time_precision` para truncá-lo à precisão de anonimização do workspace antes de selar, como o app web faz.
-
security_groupstring obrigatórioO grupo.
-
tagsstring[]Rótulos selados.
-
specialist_idsobject
Respostas #
-
201 Successful Response
-
indexobject obrigatórioO que o cofre sabe sobre um paciente/exame/modelo (`docs/PROTOCOL.md §8`): chaves, fluxos, metadado em claro. Todo campo aqui é algo que o próprio cofre lê para rotear e autorizar. O conteúdo clínico nunca aparece neste modelo: ele vive no objeto selado de cada versão, e um resumo selado curto (nome, título) vive em `encrypted_index`, que só quem tem a DEK abre. Exatamente um `security_group_id` por documento: compartilhar um paciente com outra equipe é copiá-lo, nunca compartilhar a chave.
-
version_idobject -
draft_revobject -
recordobject obrigatórioO fluxo `data` de um paciente (`PatientData` no app web) — tudo aqui é selado antes do upload. `birth_date` aceita `date` ou `datetime` com fuso e é gravado do jeito que o app web grava, como um instante ISO 8601 em UTC. Defina `Settings.time_precision` para truncá-lo à precisão de anonimização do workspace antes de selar, como o app web faz.
-
summaryobject
-
-
400 O cofre recusou a requisição como inválida.
-
errorobject obrigatórioO corpo de toda resposta não-2xx: o que deu errado, para um programa e para uma pessoa.
-
-
401 Sem certificado de cliente, ou a sessão do SDK foi recusada ou expirou (`session_expired`).
-
errorobject obrigatórioO corpo de toda resposta não-2xx: o que deu errado, para um programa e para uma pessoa.
-
-
402 O workspace não tem crédito para isto.
-
errorobject obrigatórioO corpo de toda resposta não-2xx: o que deu errado, para um programa e para uma pessoa.
-
-
403 CN não permitido, permissão negada, ou sem chave para o security group do dado (`group_key_unavailable`).
-
errorobject obrigatórioO corpo de toda resposta não-2xx: o que deu errado, para um programa e para uma pessoa.
-
-
404 Não encontrado — também um nó lido sob um grupo ao qual não pertence.
-
errorobject obrigatórioO corpo de toda resposta não-2xx: o que deu errado, para um programa e para uma pessoa.
-
-
409 Uma versão pendente ou mais nova, um replay, ou um upload que não chegou ao armazenamento.
-
errorobject obrigatórioO corpo de toda resposta não-2xx: o que deu errado, para um programa e para uma pessoa.
-
-
422 O corpo ou a query falhou na validação (`invalid_request`).
-
errorobject obrigatórioO corpo de toda resposta não-2xx: o que deu errado, para um programa e para uma pessoa.
-
-
429 Limite de taxa, depois de o backoff do SDK desistir.
-
errorobject obrigatórioO corpo de toda resposta não-2xx: o que deu errado, para um programa e para uma pessoa.
-
-
500 Um envelope não abriu (`crypto_error`, sem detalhe de propósito).
-
errorobject obrigatórioO corpo de toda resposta não-2xx: o que deu errado, para um programa e para uma pessoa.
-
-
502 O cofre falhou, ou respondeu fora do protocolo (`protocol_error`).
-
errorobject obrigatórioO corpo de toda resposta não-2xx: o que deu errado, para um programa e para uma pessoa.
-
curl --cert client.crt --key client.key \
-X POST "https://api.imgexam.com/v1/patients" \
-H "Content-Type: application/json" \
-d @body.jsonimport httpx
response = httpx.post(
"https://api.imgexam.com/v1/patients",
cert=("client.crt", "client.key"),
json=body,
)
response.raise_for_status()
print(response.json()){
"record": {
"legal_name": "string",
"display_name": "string",
"identifiers": {},
"external_id": {},
"birth_date": {},
"biological_sex": {},
"gender_identity": {},
"race_identity": {},
"email": {},
"phone": {},
"address": {},
"internal_notes": {},
"custom_attributes": {}
},
"security_group": "string",
"tags": [
"string"
],
"specialist_ids": {}
}{
"index": {
"document_id": "string",
"workspace_id": "string",
"resource": "patients",
"security_group_id": "string",
"encrypted_keys": {},
"encrypted_index": {},
"streams": {},
"meta": {},
"created_at": "string",
"created_by": "string",
"updated_at": "string",
"updated_by": {},
"is_archived": false,
"is_deleted": false
},
"version_id": {},
"draft_rev": {},
"record": {
"legal_name": "string",
"display_name": "string",
"identifiers": {},
"external_id": {},
"birth_date": {},
"biological_sex": {},
"gender_identity": {},
"race_identity": {},
"email": {},
"phone": {},
"address": {},
"internal_notes": {},
"custom_attributes": {}
},
"summary": {}
}{
"error": {
"code": "string",
"message": "string",
"trace_id": {}
}
}{
"error": {
"code": "string",
"message": "string",
"trace_id": {}
}
}{
"error": {
"code": "string",
"message": "string",
"trace_id": {}
}
}{
"error": {
"code": "string",
"message": "string",
"trace_id": {}
}
}{
"error": {
"code": "string",
"message": "string",
"trace_id": {}
}
}{
"error": {
"code": "string",
"message": "string",
"trace_id": {}
}
}{
"error": {
"code": "string",
"message": "string",
"trace_id": {}
}
}{
"error": {
"code": "string",
"message": "string",
"trace_id": {}
}
}{
"error": {
"code": "string",
"message": "string",
"trace_id": {}
}
}{
"error": {
"code": "string",
"message": "string",
"trace_id": {}
}
}