Exame - find
Consulta o exame pelo Accession Number
Notas de compatibilidade
Consulta o exame pelo Accession Number. Estados públicos: 0 Novo, 1 Assinado, 2 Laudando, 3 Pendente, 4 Revisar, 5 Reassinado, 6 Digitado, 7 Reconvocar, 8 Digitadoia, 9 A Preparar, 10 Pré Laudado, 11 Digitando. No perfil mobilemed, exames cancelados são omitidos e a leitura direta usa o erro de exame ausente da rota; legacy conserva -1. Precedência: FINAL/SIGNED=1 ou AMENDED=5; reconvocação=7; pendência/WAITING_INFO=3; reavaliação=4; transcrição ativa com editor=11; revisão pendente=6 (8 para AI); laudo em andamento=2; rascunho AI com conteúdo=8; outro rascunho com conteúdo=10; preparação=9; REPORTING/ASSIGNED=2; demais=0. Prioridades: 1 Rotina, 2 Ambulatório, 3 Urgência, 4 Emergência, 5 Plantão, 6 Internado. Com marcacaoClinica=true: 1 Com Contraste, 2 Sem Contraste, 3 Bilateral, 4 Esquerdo, 5 Direito, 6 Não Oncológico, 7 Oncológico, 8 Precisa ser comparado, 9 Com AVC, 10 Sem AVC, 11 Oncológico Benigno, 12 Oncológico Maligno, 13 Com trauma, 14 Sem trauma. 11/12 exigem classificação explícita e incluem 7; BI-RADS não infere classificação. mobilemed usa IDs numéricos estáveis e CRM decimal positivo seguro ou null; legacy mantém UUIDs e CRM anterior. Sem format, report.content é URL assinada por uma hora ou null. format=pdf com group=true devolve um único PDF base64, inclusive com base64=false. Páginas são ordenadas por criação/id, deduplicadas; arquivo único conserva bytes. Sem laudo no solicitado, usam-se metadados do primeiro disponível. Compilação não herda assinatura criptográfica. groupedContent só existe em legacy, deprecated. format aceita pdf, html, rtf ou text; outro valor recebe 400.
GEThttps://integracao.themishealth.com.br/v1/exam/:accessionNumber
Parâmetros
| Campo | Tipo | Descrição |
|---|
accessionNumber | string | Accession Number do exame Local: path. Obrigatório. |
format | string | Formato do laudo a ser retornado. Opções disponíveis: pdf, html, rtf e text. Sem este header, `report.content` é a URL assinada (1 h) do PDF gravado, ou `null` se não há PDF. Local: header. Opcional. Valores: "pdf", "html", "rtf", "text". |
base64 | string | Retorno do laudo em base64. Opções disponíveis: true e false. Padrão: true quando `format` é informado. Local: header. Opcional. Valores: "true", "false". |
group | string | Agrupa laudos disponíveis de itens relacionados (pai e cópias, exame principal e associados, ou mesmo StudyUID), em ordem determinística e sem duplicatas. Opções: true e false. Com format=pdf, mobilemed retorna um único PDF base64 em report.content. Em legacy, report.groupedContent é uma extensão deprecated; report.content já contém o PDF completo e não deve ser concatenado outra vez. Local: header. Opcional. Valores: "true", "false". |
marcacaoClinica | string | Retorno de marcações clínicas do exame (`clinicalMarkings`). Opções disponíveis: true e false. Local: header. Opcional. Valores: "true", "false". |
api | string | Opcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob". |
Respostas de sucesso
200 · OK
| Campo | Tipo | Descrição |
|---|
study | object | O `study` de `GET /v1/exam/{accessionNumber}` — e o mesmo objeto que vai no webhook `report.signed`. Obrigatório. |
study.id | integer | string | Perfil mobilemed (padrão de novas credenciais): inteiro positivo estável. Perfil legacy: UUID. O cabeçalho api não seleciona perfil. Obrigatório. |
study.accessionNumber | string | null | Obrigatório. Aceita null. |
study.studyUID | string | null | Study Instance UID; null enquanto as imagens não chegam Obrigatório. Aceita null. |
study.studyDate | string | null | Data de realização (ou agendamento), no fuso da credencial Obrigatório. Aceita null. |
study.company | object | Obrigatório. |
study.company.name | string | Nome da organização Obrigatório. |
study.auxiliaryField01 | string | null | Obrigatório. Aceita null. |
study.description | string | null | Obrigatório. Aceita null. |
study.modality | string | Obrigatório. |
study.status | any | 0 a 11 conforme procedência clínica. Cancelados são omitidos em mobilemed; legacy pode retornar -1 Cancelado. Obrigatório. |
study.priority | any | 1 Rotina, 2 Ambulatório, 3 Urgência, 4 Emergência, 5 Plantão, 6 Internado Obrigatório. |
study.clinicalMarkings | array<object> | Somente com marcacaoClinica=true. IDs 1 a 14 derivados de fatos explícitos; 11/12 exigem BENIGN/MALIGNANT e incluem 7. Opcional. Itens: object. |
study.clinicalMarkings[].id | integer | Obrigatório. |
study.clinicalMarkings[].description | string | Obrigatório. |
study.patient | object | Obrigatório. |
study.patient.codigo_paciente | string | null | Identificador do paciente como veio na worklist (patient_id/PatientId) Obrigatório. Aceita null. |
study.patient.name | string | Obrigatório. |
study.patient.birthday | string | null | Obrigatório. Aceita null. |
study.patient.sex | string | Obrigatório. Valores: "M", "F", "O". |
study.publicViewerUrl | string | null | Link público do viewer; null enquanto não há imagens Obrigatório. Aceita null. |
study.report | object | null | Obrigatório. |
study.report.id | integer | string | Perfil mobilemed (padrão de novas credenciais): inteiro positivo estável. Perfil legacy: UUID. O cabeçalho api não seleciona perfil. Obrigatório. |
study.report.publishedAt | string | null | Data/hora da assinatura Obrigatório. Aceita null. |
study.report.performingPhysician | object | null | Obrigatório. |
study.report.performingPhysician.name | string | Nome do signatário; sem signatário cadastrado, o nome livre do laudo ou o nome da credencial Obrigatório. |
study.report.performingPhysician.crm | object | Obrigatório. |
study.report.performingPhysician.crm.code | integer | string | null | mobilemed: número seguro positivo, ou null para CRM ausente/não numérico/inseguro. legacy: representação anterior. Busca canônica com UF recusa múltiplos médicos equivalentes. Obrigatório. |
study.report.performingPhysician.crm.uf | string | null | Obrigatório. Aceita null. |
study.report.performingPhysician.email | string | null | Obrigatório. Aceita null. |
study.report.content | string | null | Sem header `format`: URL assinada (1 h) do PDF, ou null sem PDF gravado. Com `format`: o conteúdo no formato pedido, em base64 por padrão (`base64: false` devolve texto para html/rtf/text). Obrigatório. Aceita null. |
study.report.groupedContent | array<string> | Extensão deprecated exclusiva de legacy em group=true/format=pdf. Não existe em mobilemed; content já é o PDF único e não deve ser concatenado novamente. Opcional. Itens: string. |
application/json · exemplo documentado
{
"study": {
"id": 101,
"accessionNumber": "12345678",
"studyUID": "1.2.99.1.96.99.192.168.0.218",
"studyDate": "2026-09-18",
"company": {
"name": "CLINICA EXEMPLO"
},
"auxiliaryField01": "CAMPO AUXILIAR 01",
"description": "TOMOGRAFIA DE CRANIO",
"modality": "CT",
"status": {
"id": 1,
"description": "Assinado"
},
"priority": {
"id": 1,
"description": "Rotina"
},
"clinicalMarkings": [
{
"id": 2,
"description": "Sem Contraste"
},
{
"id": 3,
"description": "Bilateral"
},
{
"id": 8,
"description": "Precisa ser comparado"
},
{
"id": 14,
"description": "Sem trauma"
}
],
"patient": {
"codigo_paciente": "123456",
"name": "NOME DO PACIENTE",
"birthday": "2000-12-01",
"sex": "M"
},
"publicViewerUrl": "https://laudos.exemplo.com.br/compartilhar/abc123",
"report": {
"id": 102,
"publishedAt": "2026-09-18T15:04:00.000Z",
"performingPhysician": {
"name": "NOME DO MÉDICO EXECUTANTE",
"crm": {
"code": 123456,
"uf": "SP"
},
"email": "medico@exemplo.com.br"
},
"content": "https://storage.exemplo.com.br/laudos/0b7e2a44.pdf?X-Amz-Signature=…"
}
}
}
Respostas de erro
400 · Exame inexistente na organização da credencial (ou pertencente a outra organização — o cliente não distingue). Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
message | string | array<string> | Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório. |
error | string | Só nos erros de validação ("Bad Request") Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"message": "Could not find any study"
}
404 · Token desconhecido (ou ambíguo). Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"message": "No integration found for the given token"
}
}
406 · Header `token` ausente (tem precedência sobre `api` inválido), ou header `api` inválido depois de o token ser reconhecido. Token desconhecido responde 404 antes da validação de `api`. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"error_code": 406,
"error_msg": "\"Integration token\" not provided"
}
}
Exame - findByStudyUID
Consulta o exame pelo StudyUID (com exames associados)
Notas de compatibilidade
Consulta o item elegível mais antigo por StudyUID na organização, com comentário, solicitante, contraste, subespecialidade, anexos e associatedExams. Os anexos usam ID numérico em mobilemed e UUID em legacy; arquivo é URL assinada ou base64 conforme header. Estados públicos: 0 Novo, 1 Assinado, 2 Laudando, 3 Pendente, 4 Revisar, 5 Reassinado, 6 Digitado, 7 Reconvocar, 8 Digitadoia, 9 A Preparar, 10 Pré Laudado, 11 Digitando. No perfil mobilemed, exames cancelados são omitidos e a leitura direta usa o erro de exame ausente da rota; legacy conserva -1. Precedência: FINAL/SIGNED=1 ou AMENDED=5; reconvocação=7; pendência/WAITING_INFO=3; reavaliação=4; transcrição ativa com editor=11; revisão pendente=6 (8 para AI); laudo em andamento=2; rascunho AI com conteúdo=8; outro rascunho com conteúdo=10; preparação=9; REPORTING/ASSIGNED=2; demais=0. Prioridades: 1 Rotina, 2 Ambulatório, 3 Urgência, 4 Emergência, 5 Plantão, 6 Internado. Com marcacaoClinica=true: 1 Com Contraste, 2 Sem Contraste, 3 Bilateral, 4 Esquerdo, 5 Direito, 6 Não Oncológico, 7 Oncológico, 8 Precisa ser comparado, 9 Com AVC, 10 Sem AVC, 11 Oncológico Benigno, 12 Oncológico Maligno, 13 Com trauma, 14 Sem trauma. 11/12 exigem classificação explícita e incluem 7; BI-RADS não infere classificação. mobilemed usa IDs numéricos estáveis e CRM decimal positivo seguro ou null; legacy mantém UUIDs e CRM anterior. Sem format, report.content é URL assinada por uma hora ou null. format=pdf com group=true devolve um único PDF base64, inclusive com base64=false. Páginas são ordenadas por criação/id, deduplicadas; arquivo único conserva bytes. Sem laudo no solicitado, usam-se metadados do primeiro disponível. Compilação não herda assinatura criptográfica. groupedContent só existe em legacy, deprecated.
GEThttps://integracao.themishealth.com.br/v1/exam/studyUID/:studyUID
Parâmetros
| Campo | Tipo | Descrição |
|---|
studyUID | string | StudyUID (Study Instance UID) do exame Local: path. Obrigatório. |
format | string | Formato do laudo a ser retornado. Opções disponíveis: pdf, html, rtf e text. Sem este header, `report.content` é a URL assinada (1 h) do PDF gravado, ou `null` se não há PDF. Local: header. Opcional. Valores: "pdf", "html", "rtf", "text". |
base64 | string | Retorno do laudo em base64. Opções disponíveis: true e false. Padrão: true quando `format` é informado. Local: header. Opcional. Valores: "true", "false". |
group | string | Agrupa laudos disponíveis de itens relacionados (pai e cópias, exame principal e associados, ou mesmo StudyUID), em ordem determinística e sem duplicatas. Opções: true e false. Com format=pdf, mobilemed retorna um único PDF base64 em report.content. Em legacy, report.groupedContent é uma extensão deprecated; report.content já contém o PDF completo e não deve ser concatenado outra vez. Local: header. Opcional. Valores: "true", "false". |
marcacaoClinica | string | Retorno de marcações clínicas do exame (`clinicalMarkings`). Opções disponíveis: true e false. Local: header. Opcional. Valores: "true", "false". |
api | string | Opcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob". |
Respostas de sucesso
200 · OK
| Campo | Tipo | Descrição |
|---|
study | any | Obrigatório. |
associatedExams | array<object> | Obrigatório. Itens: object. |
associatedExams[].study | any | Obrigatório. |
application/json · exemplo documentado
{
"study": {
"id": 101,
"accessionNumber": "12345678",
"studyUID": "1.2.99.1.96.99.192.168.0.218",
"studyDate": "2026-09-18",
"company": {
"name": "CLINICA EXEMPLO"
},
"auxiliaryField01": "CAMPO AUXILIAR 01",
"description": "TOMOGRAFIA DE CRANIO",
"modality": "CT",
"status": {
"id": 1,
"description": "Assinado"
},
"priority": {
"id": 1,
"description": "Rotina"
},
"patient": {
"codigo_paciente": "123456",
"name": "NOME DO PACIENTE",
"birthday": "2000-12-01",
"sex": "M"
},
"publicViewerUrl": "https://laudos.exemplo.com.br/compartilhar/abc123",
"report": {
"id": 102,
"publishedAt": "2026-09-18T15:04:00.000Z",
"performingPhysician": {
"name": "NOME DO MÉDICO EXECUTANTE",
"crm": {
"code": 123456,
"uf": "SP"
},
"email": "medico@exemplo.com.br"
},
"content": "https://storage.exemplo.com.br/laudos/0b7e2a44.pdf?X-Amz-Signature=…"
},
"comment": "COMENTÁRIO DO EXAME",
"applicantPhysician": "NOME DO MÉDICO SOLICITANTE",
"contrast": {
"description": "campo auxiliar 02"
},
"subspecialty": {
"description": "TOMOGRAFIA DE CRANIO",
"subspecialtyCode": "123"
},
"attachments": [
{
"anexoID": 104,
"mimeType": "application/pdf",
"arquivo": "https://storage.exemplo.com.br/anexos/9f1c2d3e.pdf?X-Amz-Signature=…"
}
]
},
"associatedExams": [
{
"study": {
"id": 103,
"accessionNumber": "12345679",
"studyUID": "1.2.99.1.96.99.192.168.0.218",
"studyDate": "2026-09-18",
"company": {
"name": "CLINICA EXEMPLO"
},
"auxiliaryField01": "CAMPO AUXILIAR 01",
"description": "TOMOGRAFIA DE CRANIO",
"modality": "CT",
"status": {
"id": 0,
"description": "Novo"
},
"priority": {
"id": 1,
"description": "Rotina"
},
"patient": {
"codigo_paciente": "123456",
"name": "NOME DO PACIENTE",
"birthday": "2000-12-01",
"sex": "M"
},
"publicViewerUrl": "https://laudos.exemplo.com.br/compartilhar/abc123",
"report": null,
"contrast": {
"description": ""
},
"subspecialty": {
"description": "TOMOGRAFIA DE CRANIO",
"subspecialtyCode": "123"
}
}
}
]
}
Respostas de erro
400 · Exame inexistente na organização da credencial (ou pertencente a outra organização — o cliente não distingue). Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
message | string | array<string> | Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório. |
error | string | Só nos erros de validação ("Bad Request") Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"message": "Could not find any study"
}
404 · Token desconhecido (ou ambíguo). Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"message": "No integration found for the given token"
}
}
406 · Header `token` ausente (tem precedência sobre `api` inválido), ou header `api` inválido depois de o token ser reconhecido. Token desconhecido responde 404 antes da validação de `api`. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"error_code": 406,
"error_msg": "\"Integration token\" not provided"
}
}
Exame - integrationLogs
Relatório de logs de integração
Notas de compatibilidade
Retorna uma array de logs de integração, com no máximo 20 por página, ou retorna um link para download dos logs em Excel (`xlsx=true` → `{ "url": "..." }`, URL assinada, sem paginação). O relatório mistura os dois sentidos: chamadas recebidas por esta credencial e entregas do webhook de retorno do laudo ao sistema terceiro (`descricaoErro` traz a causa da falha, p. ex. `connect ECONNREFUSED`). `statusRetorno` é o HTTP da chamada/entrega; `codigoPedido` é o código do pedido do exame (`order_code` da worklist), quando há.
GEThttps://integracao.themishealth.com.br/v1/exam/logs/integration
Parâmetros
| Campo | Tipo | Descrição |
|---|
success | boolean | Retorno de logs que obtiveram ou não sucesso na integração. Opções disponíveis: true e false. Sem o filtro, vêm os dois. Local: query. Opcional. |
startDate | string | Data do começo do relatório. Formato YYYY-MM-DD. Local: query. Opcional. |
finalDate | string | Data do fim do relatório. Formato YYYY-MM-DD. Local: query. Opcional. |
page | integer | Número da página do relatório (padrão 1). Local: query. Opcional. |
xlsx | boolean | Retorno do relatório em um link para download em formato xlsx. Opções disponíveis: true e false. Local: query. Opcional. |
api | string | Opcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob". |
Respostas de sucesso
200 · OK
| Campo | Tipo | Descrição |
|---|
totalLogs | object | Obrigatório. |
totalLogs.total | integer | Obrigatório. |
totalLogs.pages | integer | Obrigatório. |
logs | array<object> | Obrigatório. Itens: object. |
logs[].accessionNumber | string | null | Obrigatório. Aceita null. |
logs[].studyIUID | string | null | Obrigatório. Aceita null. |
logs[].codigoPedido | integer | string | null | mobilemed: código decimal seguro ou ID EXAM_ORDER de pedido ativo comprovado; null caso indisponível. legacy: texto original. Obrigatório. Aceita null. |
logs[].statusRetorno | integer | null | HTTP da chamada recebida ou da entrega do webhook Obrigatório. Aceita null. |
logs[].descricaoErro | string | null | Obrigatório. Aceita null. |
logs[].codigoPedidoOriginal | string | Extensão mobilemed quando o código original não pode ser representado numericamente. Opcional. |
url | string | Obrigatório. |
application/json · exemplo documentado
{
"totalLogs": {
"total": 417,
"pages": 21
},
"logs": [
{
"accessionNumber": "12313123",
"studyIUID": "1.2.99.1.96.99.192.168.0.218",
"codigoPedido": "3656753",
"statusRetorno": 0,
"descricaoErro": "fetch failed: connect ECONNREFUSED 127.0.0.1:8082"
}
]
}
Respostas de erro
400 · Corpo/parâmetros inválidos (validação). Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
message | string | array<string> | Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório. |
error | string | Só nos erros de validação ("Bad Request") Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"message": [
"comment must be a string"
],
"error": "Bad Request"
}
404 · Token desconhecido (ou ambíguo). Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"message": "No integration found for the given token"
}
}
406 · Header `token` ausente (tem precedência sobre `api` inválido), ou header `api` inválido depois de o token ser reconhecido. Token desconhecido responde 404 antes da validação de `api`. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"error_code": 406,
"error_msg": "\"Integration token\" not provided"
}
}
Exame - keyImagesJPEG
Imagens-chave do laudo em JPEG
Notas de compatibilidade
Busca as imagens chaves em JPEG: URLs assinadas das imagens-chave anexadas ao laudo do exame. Exame sem laudo ou sem imagens-chave responde `{ "images": [] }`.
GEThttps://integracao.themishealth.com.br/v1/exam/:accessionNumber/keyimages
Parâmetros
| Campo | Tipo | Descrição |
|---|
accessionNumber | string | Accession Number do exame Local: path. Obrigatório. |
api | string | Opcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob". |
Respostas de sucesso
200 · OK
| Campo | Tipo | Descrição |
|---|
images | array<string> | Obrigatório. Itens: string. |
application/json · exemplo documentado
{
"images": [
"http://link.com/images"
]
}
Respostas de erro
400 · Exame inexistente na organização da credencial (ou pertencente a outra organização — o cliente não distingue). Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
message | string | array<string> | Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório. |
error | string | Só nos erros de validação ("Bad Request") Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"message": "Could not find any study"
}
404 · Token desconhecido (ou ambíguo). Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"message": "No integration found for the given token"
}
}
406 · Header `token` ausente (tem precedência sobre `api` inválido), ou header `api` inválido depois de o token ser reconhecido. Token desconhecido responde 404 antes da validação de `api`. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"error_code": 406,
"error_msg": "\"Integration token\" not provided"
}
}
Exame - receiveReport
Recebe o laudo externo (HTML, RTF ou PDF) e assina
Notas de compatibilidade
Recebe laudo do exame pelo seu respectivo Accession Number. São suportados os formatos HTML, RTF e PDF, que deverão ser especificados no atributo `reportFormat` do body; o documento vai em `report`, em base64 (aceita também data URL `data:...;base64,`). Caso `reportFormat` seja PDF, o laudo não poderá ser alterado, somente refeito do zero. Caso a opção `useIntegrationUser` seja false (ou ausente), deverá ser enviado o campo `physicianCrmUf` (`"12345-SP"`) com o CRM e UF do médico executante, cadastrado na plataforma com esse CRM/UF. No lugar do Accession Number, o path aceita a palavra `study` para localizar o exame pelo `studyIUID` do body (`POST /v1/exam/study/report`). O laudo recebido vira um laudo **assinado** na plataforma e dispara o webhook `report.signed` (quando a credencial tem webhook configurado). Um exame já assinado responde 400 `Exam already signed, no changes allowed`. **Desvios:** a doc da MobileMed escreve o path com o erro de digitação `:acessionNumber`; aqui é `{accessionNumber}`. Laudo externo em exame que ainda não recebeu imagens é assinado mesmo assim e o status do item da worklist é mantido. Sucesso é `{ "message": "Exam report set successfully" }`.
POSThttps://integracao.themishealth.com.br/v1/exam/:accessionNumber/report
Parâmetros
| Campo | Tipo | Descrição |
|---|
accessionNumber | string | Accession Number do exame, ou a palavra `study` para usar o `studyIUID` do body Local: path. Obrigatório. |
api | string | Opcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob". |
reportFormat | string | Sem distinção de caixa Obrigatório. Valores: "html", "rtf", "pdf". |
report | string | Documento em base64 (ou data URL) Obrigatório. |
physicianCrmUf | string | "<crm>-<uf>" do médico executante; obrigatório quando useIntegrationUser não é true Opcional. |
useIntegrationUser | boolean | true: assina em nome da credencial (sem médico) Opcional. |
studyIUID | string | Localizador quando o path traz `study` no lugar do accession Opcional. |
Exemplos de requisição
application/json · Request-Example (doc MobileMed)
{
"reportFormat": "html",
"physicianCrmUf": "12345-SP",
"report": "PHA+PHN0cm9uZz5UT01PR1JBRklBIENPTVBVVEFET1JJWkFEQSBERSBBQkRPTUUgRSBQRUxWRTwvc3Ryb25nPjwvcD4KPHA"
}
application/json · Request-Example (doc MobileMed)
{
"reportFormat": "pdf",
"useIntegrationUser": true,
"report": "base64",
"studyIUID": "1.2.4352.434313124"
}
Respostas de sucesso
200 · OK
| Campo | Tipo | Descrição |
|---|
message | string | Obrigatório. |
application/json · exemplo documentado
{
"message": "Exam report set successfully"
}
Respostas de erro
400 · Exame inexistente na organização da credencial (ou pertencente a outra organização — o cliente não distingue); Exame já assinado, sem alterações permitidas; Corpo/parâmetros inválidos (validação); report não é base64; reportFormat pdf com conteúdo que não é PDF; sem physicianCrmUf; physicianCrmUf mal formado; path `study` sem studyIUID. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
message | string | array<string> | Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório. |
error | string | Só nos erros de validação ("Bad Request") Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"message": "Could not find any study"
}
404 · Token desconhecido (ou ambíguo); CRM/UF sem médico cadastrado. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
message | string | array<string> | Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório. |
error | string | Só nos erros de validação ("Bad Request") Opcional. |
application/json · exemplo documentado
{
"error": {
"message": "No integration found for the given token"
}
}
406 · Header `token` ausente (tem precedência sobre `api` inválido), ou header `api` inválido depois de o token ser reconhecido. Token desconhecido responde 404 antes da validação de `api`. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"error_code": 406,
"error_msg": "\"Integration token\" not provided"
}
}
Exame - reintegrateReports
Reenfileira o webhook de retorno de laudos
Notas de compatibilidade
Reenfileira report.signed para até 20 accessions, com contador zerado, nas credenciais da organização inscritas nesse evento e com destino efetivo. Não reintegra study.received. Accessions ausentes são ignorados. Responde {message: "Exams sended to reintegration queue."}.
POSThttps://integracao.themishealth.com.br/v1/exam/reintegrateReports
Parâmetros
| Campo | Tipo | Descrição |
|---|
api | string | Opcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob". |
accessionNumbers | array<object> | Obrigatório. Itens: object. |
accessionNumbers[].accessionNumber | string | Obrigatório. |
Exemplos de requisição
application/json · Request-Example (doc MobileMed)
{
"accessionNumbers": [
{
"accessionNumber": "12345"
},
{
"accessionNumber": "23456"
},
{
"accessionNumber": "34567"
}
]
}
Respostas de sucesso
200 · OK
| Campo | Tipo | Descrição |
|---|
message | string | Obrigatório. |
application/json · exemplo documentado
{
"message": "Exams sended to reintegration queue."
}
Respostas de erro
400 · Corpo/parâmetros inválidos (validação). Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
message | string | array<string> | Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório. |
error | string | Só nos erros de validação ("Bad Request") Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"message": [
"comment must be a string"
],
"error": "Bad Request"
}
404 · Token desconhecido (ou ambíguo). Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"message": "No integration found for the given token"
}
}
406 · Header `token` ausente (tem precedência sobre `api` inválido), ou header `api` inválido depois de o token ser reconhecido. Token desconhecido responde 404 antes da validação de `api`. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"error_code": 406,
"error_msg": "\"Integration token\" not provided"
}
}
Exame - replicate
Replica o exame em novos Accession Numbers
Notas de compatibilidade
Replica entradas de um exame de acordo com o Accession Number da entrada principal já existente no portal: cria cópias do item (mesmo paciente, mesmo StudyUID) com os accessions informados, até 50 por chamada. `studyDescription` é opcional — sem ele a cópia herda a descrição do original. Accession que já existe na organização responde 409.
POSThttps://integracao.themishealth.com.br/v1/exam/:accessionNumber/replicate
Parâmetros
| Campo | Tipo | Descrição |
|---|
accessionNumber | string | Accession Number da entrada principal do exame Local: path. Obrigatório. |
api | string | Opcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob". |
exams | array<object> | Obrigatório. Itens: object. |
exams[].accessionNumber | string | Obrigatório. |
exams[].studyDescription | string | Opcional. |
Exemplos de requisição
application/json · Request-Example (doc MobileMed)
{
"exams": [
{
"accessionNumber": "1111",
"studyDescription": "DESCRICAO DO ESTUDO"
},
{
"accessionNumber": "2222",
"studyDescription": "DESCRICAO DO ESTUDO"
}
]
}
Respostas de sucesso
200 · OK
| Campo | Tipo | Descrição |
|---|
message | string | Obrigatório. |
application/json · exemplo documentado
{
"message": "Exams replicated successfully"
}
Respostas de erro
400 · Exame inexistente na organização da credencial (ou pertencente a outra organização — o cliente não distingue); corpo/parâmetros inválidos (validação); ou exame sem paciente vinculado. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
message | string | array<string> | Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório. |
error | string | Só nos erros de validação ("Bad Request") Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"message": "Could not find any study"
}
404 · Token desconhecido (ou ambíguo). Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"message": "No integration found for the given token"
}
}
406 · Header `token` ausente (tem precedência sobre `api` inválido), ou header `api` inválido depois de o token ser reconhecido. Token desconhecido responde 404 antes da validação de `api`. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"error_code": 406,
"error_msg": "\"Integration token\" not provided"
}
}
409 · Accession Number já existe na organização. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
message | string | array<string> | Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório. |
error | string | Só nos erros de validação ("Bad Request") Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"message": "Accession 987654 already exists for organization … with different fields: patientName. Either retry with the same payload or PATCH explicitly.",
"error": "Conflict"
}
Exame - saveMammography
Grava a ficha de mamografia do exame
Notas de compatibilidade
Recebe a ficha de mamografia vinculada ao exame pelo Accession Number. Grava o JSON `mammography` inteiro no exame (reenvio **sobrescreve** o JSON inteiro) e, no que dá para mapear com segurança, alimenta a anamnese estruturada da tela de laudo (esta com merge sobre o que o radiologista já preencheu). Exame assinado (status 1 ou 5) não pode ser alterado. O campo `is_mammography` no body é ignorado. Exame ausente: 404 no perfil mobilemed, 400 no legacy. Não altera outros erros de payload/assinatura.
POSThttps://integracao.themishealth.com.br/v1/exam/:accessionNumber/mammography
Parâmetros
| Campo | Tipo | Descrição |
|---|
accessionNumber | string | Accession Number do exame Local: path. Obrigatório. |
api | string | Opcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob". |
mammography | object | Ficha de mamografia — o JSON é gravado como veio. Obrigatório. |
Exemplos de requisição
application/json · Request-Example (doc MobileMed)
{
"mammography": {
"cnes": "",
"service_name": "",
"exam_date": "2026-08-18",
"exam_number": "",
"never_menstruated": false,
"last_menstruation": null,
"forgot_last_menstruation": false,
"menopause_age": null,
"forgot_menopause_age": false,
"use_hormone": "no",
"is_pregnant": "no",
"film_quantity": 0,
"exibir_dados_preparo_exame": false,
"data_modal": {
"info_pessoais": {
"nome_mae": "",
"data_nascimento": null,
"escolaridade": ""
},
"info_residenciais": {
"lougradouro": "",
"numero": "",
"complemento": "",
"bairro": "",
"uf": "",
"cep": "",
"referencia": ""
},
"anamnese": {
"risk_of_cancer": "no",
"had_mammography": "no",
"mammography_year": "",
"breast_examined": "yes",
"nodule": "no"
},
"right": {
"surgery": []
},
"left": {
"surgery": []
},
"no_surgery": false
},
"right": {
"breast_was_not_radiographed": false,
"skin": "not_filled",
"breast_type": "not_filled",
"took_ultrasound": []
},
"left": {
"breast_was_not_radiographed": false,
"skin": "not_filled",
"breast_type": "not_filled",
"took_ultrasound": []
},
"radiological_classification": {},
"recommendations": {},
"comments": ""
}
}
Respostas de sucesso
200 · OK
| Campo | Tipo | Descrição |
|---|
message | string | Obrigatório. |
application/json · exemplo documentado
{
"message": "Mammography report saved successfully"
}
Respostas de erro
400 · Exame inexistente na organização da credencial (ou pertencente a outra organização — o cliente não distingue); Exame já assinado, sem alterações permitidas; Corpo/parâmetros inválidos (validação); sem mammography. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
message | string | array<string> | Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório. |
error | string | Só nos erros de validação ("Bad Request") Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"message": "Could not find any study"
}
404 · Token desconhecido (ou ambíguo). Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"message": "No integration found for the given token"
}
}
406 · Header `token` ausente (tem precedência sobre `api` inválido), ou header `api` inválido depois de o token ser reconhecido. Token desconhecido responde 404 antes da validação de `api`. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"error_code": 406,
"error_msg": "\"Integration token\" not provided"
}
}
Exame - setAttachment
Anexa arquivos ao exame
Notas de compatibilidade
Aceita JPEG, PNG, GIF, BMP e PDF detectados pelos bytes, em base64; até 1 MB por arquivo e 20 por chamada. Preserva MIME e bytes originais. GIF/BMP promovidos e citados usam PNG derivada; GIF usa primeiro quadro composto, mantendo original animado para download. Arquivos inválidos são recusados.
POSThttps://integracao.themishealth.com.br/v1/exam/:accessionNumber/attachment
Parâmetros
| Campo | Tipo | Descrição |
|---|
accessionNumber | string | Accession Number do exame Local: path. Obrigatório. |
api | string | Opcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob". |
attachments | array<string> | Obrigatório. Itens: string. |
Exemplos de requisição
application/json · Request-Example (doc MobileMed)
{
"attachments": [
"PHA+PHN0cm9uZz5UT01PR1JBRklBIENPTVBVVEFET1JJWkFEQSBERSBBQkRPTUUgRSBQRUxWRTwvc3Ryb25nPjwvcD4KPH1",
"PHA+PHN0cm9uZz5UT01PR1JBRklBIENPTVBVVEFET1JJWkFEQSBERSBBQkRPTUUgRSBQRUxWRTwvc3Ryb25nPjwvcD4KPH2",
"PHA+PHN0cm9uZz5UT01PR1JBRklBIENPTVBVVEFET1JJWkFEQSBERSBBQkRPTUUgRSBQRUxWRTwvc3Ryb25nPjwvcD4KPH3"
]
}
Respostas de sucesso
200 · OK
| Campo | Tipo | Descrição |
|---|
message | string | Obrigatório. |
application/json · exemplo documentado
{
"message": "Attachments successfully attached to exam"
}
Respostas de erro
400 · Exame inexistente na organização da credencial (ou pertencente a outra organização — o cliente não distingue); Corpo/parâmetros inválidos (validação); item vazio ou não base64; acima de 1 MB; tipo não suportado. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
message | string | array<string> | Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório. |
error | string | Só nos erros de validação ("Bad Request") Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"message": "Could not find any study"
}
404 · Token desconhecido (ou ambíguo). Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"message": "No integration found for the given token"
}
}
406 · Header `token` ausente (tem precedência sobre `api` inválido), ou header `api` inválido depois de o token ser reconhecido. Token desconhecido responde 404 antes da validação de `api`. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"error_code": 406,
"error_msg": "\"Integration token\" not provided"
}
}
Exame - setPhysician
Atribui o médico executante ao exame
Notas de compatibilidade
Atribui o médico executante ao exame ainda não laudado pelo seu respectivo Accession Number. `crm_uf` no formato `" - "` (`"12345-SP"`); o médico precisa estar cadastrado na organização com esse CRM e UF (404 `Physician not found` se não estiver). Exame assinado responde 400.
POSThttps://integracao.themishealth.com.br/v1/exam/:accessionNumber/resident-physician
Parâmetros
| Campo | Tipo | Descrição |
|---|
accessionNumber | string | Accession Number do exame Local: path. Obrigatório. |
api | string | Opcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob". |
crm_uf | string | Obrigatório. |
Exemplos de requisição
application/json · Request-Example (doc MobileMed)
{
"crm_uf": "12345-SP"
}
Respostas de sucesso
200 · OK
| Campo | Tipo | Descrição |
|---|
message | string | Obrigatório. |
application/json · exemplo documentado
{
"message": "Physician assigned to the exam"
}
Respostas de erro
400 · Exame inexistente na organização da credencial (ou pertencente a outra organização — o cliente não distingue); Exame já assinado, sem alterações permitidas; Corpo/parâmetros inválidos (validação); crm_uf mal formado. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
message | string | array<string> | Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório. |
error | string | Só nos erros de validação ("Bad Request") Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"message": "Could not find any study"
}
404 · Token desconhecido (ou ambíguo); CRM/UF sem médico cadastrado. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
message | string | array<string> | Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório. |
error | string | Só nos erros de validação ("Bad Request") Opcional. |
application/json · exemplo documentado
{
"error": {
"message": "No integration found for the given token"
}
}
406 · Header `token` ausente (tem precedência sobre `api` inválido), ou header `api` inválido depois de o token ser reconhecido. Token desconhecido responde 404 antes da validação de `api`. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"error_code": 406,
"error_msg": "\"Integration token\" not provided"
}
}
Exame - setPriority
Altera a prioridade do exame
Notas de compatibilidade
Atribui nova prioridade ao exame. As prioridades disponíveis são: Rotina (1), Ambulatório (2), Urgência (3), Emergência (4), Plantão (5) e — além da lista da doc — Internado (6). `priority_id` aceita número ou string. Exame assinado responde 400.
POSThttps://integracao.themishealth.com.br/v1/exam/:accessionNumber/priority
Parâmetros
| Campo | Tipo | Descrição |
|---|
accessionNumber | string | Accession Number do exame Local: path. Obrigatório. |
api | string | Opcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob". |
priority_id | integer | string | 1 Rotina, 2 Ambulatório, 3 Urgência, 4 Emergência, 5 Plantão, 6 Internado Obrigatório. |
Exemplos de requisição
application/json · Request-Example (doc MobileMed)
{
"priority_id": "2"
}
Respostas de sucesso
200 · OK
| Campo | Tipo | Descrição |
|---|
message | string | Obrigatório. |
application/json · exemplo documentado
{
"message": "Exam priority changed successfully"
}
Respostas de erro
400 · Exame inexistente na organização da credencial (ou pertencente a outra organização — o cliente não distingue); Exame já assinado, sem alterações permitidas; Corpo/parâmetros inválidos (validação); id fora de 1..6. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
message | string | array<string> | Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório. |
error | string | Só nos erros de validação ("Bad Request") Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"message": "Could not find any study"
}
404 · Token desconhecido (ou ambíguo). Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"message": "No integration found for the given token"
}
}
406 · Header `token` ausente (tem precedência sobre `api` inválido), ou header `api` inválido depois de o token ser reconhecido. Token desconhecido responde 404 antes da validação de `api`. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"error_code": 406,
"error_msg": "\"Integration token\" not provided"
}
}
Exame - setRelease
Libera ou revoga a liberação do exame ao paciente
Notas de compatibilidade
Exige laudo FINAL, SIGNED ou AMENDED e persiste worklist_items.patient_delivery_released com auditoria. release=false retém o exame nos canais de paciente (lista, detalhe, PDF, protocolo, e-mail, share e DICOM) e revoga seus links específicos; sessão do paciente e outros exames continuam. release=true permite novos links, sem reativar os revogados. Staff, integração e audiência physician continuam operacionais. O PACS revalida novas leituras de paciente, inclusive grants anteriores; qualquer item ativo retido bloqueia imagens comuns do mesmo StudyUID. Arquivos já entregues e URLs antigas de storage seguem sua validade original.
POSThttps://integracao.themishealth.com.br/v1/exam/:accessionNumber/release
Parâmetros
| Campo | Tipo | Descrição |
|---|
accessionNumber | string | Accession Number do exame Local: path. Obrigatório. |
api | string | Opcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob". |
release | boolean | Aceita também "true"/"false". Obrigatório. |
Exemplos de requisição
application/json · Request-Example (doc MobileMed)
{
"release": true
}
Respostas de sucesso
200 · OK
| Campo | Tipo | Descrição |
|---|
message | string | Obrigatório. |
application/json · exemplo documentado
{
"message": "Exam released"
}
Respostas de erro
400 · Exame inexistente na organização da credencial (ou pertencente a outra organização — o cliente não distingue); Corpo/parâmetros inválidos (validação); exame sem laudo assinado. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
message | string | array<string> | Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório. |
error | string | Só nos erros de validação ("Bad Request") Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"message": "Could not find any study"
}
404 · Token desconhecido (ou ambíguo). Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"message": "No integration found for the given token"
}
}
406 · Header `token` ausente (tem precedência sobre `api` inválido), ou header `api` inválido depois de o token ser reconhecido. Token desconhecido responde 404 antes da validação de `api`. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"error_code": 406,
"error_msg": "\"Integration token\" not provided"
}
}
Exame - updateDescription
Atualiza a descrição do exame
Notas de compatibilidade
Atualiza a descrição do exame (até 255 caracteres). Exame assinado responde 400.
POSThttps://integracao.themishealth.com.br/v1/exam/:accessionNumber/description
Parâmetros
| Campo | Tipo | Descrição |
|---|
accessionNumber | string | Accession Number do exame Local: path. Obrigatório. |
api | string | Opcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob". |
description | string | Obrigatório. |
Exemplos de requisição
application/json · Request-Example (doc MobileMed)
{
"description": "Example of a Description"
}
Respostas de sucesso
200 · OK
| Campo | Tipo | Descrição |
|---|
message | string | Obrigatório. |
application/json · exemplo documentado
{
"message": "Description was changed successfully"
}
Respostas de erro
400 · Exame inexistente na organização da credencial (ou pertencente a outra organização — o cliente não distingue); Exame já assinado, sem alterações permitidas; Corpo/parâmetros inválidos (validação). Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
message | string | array<string> | Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório. |
error | string | Só nos erros de validação ("Bad Request") Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"message": "Could not find any study"
}
404 · Token desconhecido (ou ambíguo). Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"message": "No integration found for the given token"
}
}
406 · Header `token` ausente (tem precedência sobre `api` inválido), ou header `api` inválido depois de o token ser reconhecido. Token desconhecido responde 404 antes da validação de `api`. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"error_code": 406,
"error_msg": "\"Integration token\" not provided"
}
}
Physician - findByCrmUf
Busca médico pelo CRM e UF
Notas de compatibilidade
Busca por CRM e UF na organização da credencial, com assinatura visual em base64 ou null. Ambos são obrigatórios. mobilemed canonicaliza decimal + UF, produz CRM seguro positivo ou null e recusa ambiguidade; não remove pontuação nem arredonda. Legacy conserva representação anterior.
GEThttps://integracao.themishealth.com.br/v1/physician
Parâmetros
| Campo | Tipo | Descrição |
|---|
crm | string | CRM do médico Local: query. Obrigatório. |
uf | string | UF do CRM do médico Local: query. Obrigatório. |
api | string | Opcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob". |
Respostas de sucesso
200 · OK
| Campo | Tipo | Descrição |
|---|
physician | object | Obrigatório. |
physician.name | string | Obrigatório. |
physician.crm | object | Obrigatório. |
physician.crm.code | integer | string | null | mobilemed: número seguro positivo, ou null para CRM ausente/não numérico/inseguro. legacy: representação anterior. Busca canônica com UF recusa múltiplos médicos equivalentes. Obrigatório. |
physician.crm.uf | string | Obrigatório. |
physician.signature | string | null | Imagem da assinatura em base64; null sem imagem Obrigatório. Aceita null. |
application/json · exemplo documentado
{
"physician": {
"name": "Dr. Exemplo",
"crm": {
"code": 1234,
"uf": "SP"
},
"signature": "iVBORw0KGgoAAAANSUhEUgAA…"
}
}
Respostas de erro
400 · Corpo/parâmetros inválidos (validação). Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
message | string | array<string> | Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório. |
error | string | Só nos erros de validação ("Bad Request") Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"message": [
"comment must be a string"
],
"error": "Bad Request"
}
404 · Token desconhecido (ou ambíguo); CRM/UF sem médico cadastrado. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
message | string | array<string> | Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório. |
error | string | Só nos erros de validação ("Bad Request") Opcional. |
application/json · exemplo documentado
{
"error": {
"message": "No integration found for the given token"
}
}
406 · Header `token` ausente (tem precedência sobre `api` inválido), ou header `api` inválido depois de o token ser reconhecido. Token desconhecido responde 404 antes da validação de `api`. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"error_code": 406,
"error_msg": "\"Integration token\" not provided"
}
}
Result - addPrintCount
Incrementa o contador de impressão do exame
Notas de compatibilidade
Incrementa atomicamente o contador do exame identificado pelo ID externo WORKLIST_ITEM numérico/decimal ou alias UUID. Sucesso 201 sem corpo. ID desconhecido ou fora do escopo retorna 400 Could not find any study.
POSThttps://integracao.themishealth.com.br/v1/results/add-print-count
Parâmetros
| Campo | Tipo | Descrição |
|---|
api | string | Opcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob". |
exam_id | integer | string | string | ID externo seguro como número ou texto decimal, ou alias UUID; resolução sempre na organização da credencial. Obrigatório. |
Exemplos de requisição
application/json · Exemplo (One Laudos)
{
"exam_id": "6d2c1e0a-7f6b-4c1e-9a1a-3f2b5c8d9e01"
}
application/json · Request-Example (doc MobileMed)
{
"exam_id": 1
}
Respostas de sucesso
201 · Criado — sem corpo
Corpo de resposta não documentado.
Respostas de erro
400 · Exame inexistente na organização da credencial (ou pertencente a outra organização — o cliente não distingue); Corpo/parâmetros inválidos (validação). Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
message | string | array<string> | Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório. |
error | string | Só nos erros de validação ("Bad Request") Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"message": "Could not find any study"
}
404 · Token desconhecido (ou ambíguo). Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"message": "No integration found for the given token"
}
}
406 · Header `token` ausente (tem precedência sobre `api` inválido), ou header `api` inválido depois de o token ser reconhecido. Token desconhecido responde 404 antes da validação de `api`. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"error_code": 406,
"error_msg": "\"Integration token\" not provided"
}
}
Result - getDigitalSign
Laudo e assinatura digital pelo código
Notas de compatibilidade
Laudo pelo ID externo REPORT decimal ou alias UUID. mobilemed retorna HTTP 201 com os 13 campos e digital_sign completo quando há artefato SIGNED ativo da versão vigente. Validação desconhecida é null; SHA256 do PDF não prova assinatura. legacy retorna HTTP 200 com os seis campos históricos.
GEThttps://integracao.themishealth.com.br/v1/results/signed/:code
Parâmetros
| Campo | Tipo | Descrição |
|---|
code | string | ID externo decimal REPORT ou alias UUID Local: path. Obrigatório. |
api | string | Opcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob". |
Respostas de sucesso
200 · Sucesso — perfil legacy · perfil Legacy
| Campo | Tipo | Descrição |
|---|
id | string | UUID do laudo Obrigatório. |
exame_id | string | Obrigatório. |
usuario_id | string | null | Quem assinou (null para laudo externo assinado pela credencial) Obrigatório. Aceita null. |
html | string | Obrigatório. |
signed_at | string | null | Obrigatório. Aceita null. |
signature | object | null | Documento assinado ICP-Brasil mais recente; null quando só há assinatura eletrônica simples Obrigatório. |
signature.status | string | Obrigatório. |
signature.storage_key | string | Obrigatório. |
application/json · exemplo documentado
{
"id": "0b7e2a44-1d6f-4a3e-8c2f-5e1d2c3b4a55",
"exame_id": "6d2c1e0a-7f6b-4c1e-9a1a-3f2b5c8d9e01",
"usuario_id": "3a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d",
"html": "<p>Laudo…</p>",
"signed_at": "2026-09-18T15:04:00.000Z",
"signature": {
"status": "SIGNED",
"storage_key": "signed/0b7e2a44.pdf"
}
}
201 · Sucesso — perfil mobilemed · perfil MobileMed
| Campo | Tipo | Descrição |
|---|
id | integer | Obrigatório. |
exame_id | integer | Obrigatório. |
usuario_id | integer | null | Obrigatório. |
html | string | Obrigatório. |
pdf_nome | string | null | Obrigatório. Aceita null. |
pdf_path | string | null | URL assinada do PDF selecionado, ou null. Obrigatório. Aceita null. |
data_criacao | string | Obrigatório. |
data_alteracao | string | Obrigatório. |
status_id | integer | Obrigatório. |
data_conclusao | string | null | Obrigatório. Aceita null. |
endereco_ip | null | Não há IP de assinatura persistido; nunca usa o IP desta consulta. Obrigatório. |
birads | string | null | Obrigatório. Aceita null. |
digital_sign | object | null | Obrigatório. |
digital_sign.signatureRSA | object | Obrigatório. |
digital_sign.signatureRSA.signatureAlgorithm | null | Obrigatório. |
digital_sign.signatureRSA.algorithmHash | null | Obrigatório. |
digital_sign.signatureRSA.validation | object | Obrigatório. |
digital_sign.signatureRSA.validation.valid | null | null: verificação não registrada; nenhum booleano é inferido de status ou hash do arquivo. Obrigatório. |
digital_sign.signatureRSA.validation.description | string | Obrigatório. |
digital_sign.datetimeSignature | string | null | Horário de conclusão registrado pelo serviço, no fuso da credencial (dd/MM/yyyy HH:mm:ss). Não é timestamp extraído do certificado ou de TSA. Obrigatório. Aceita null. |
digital_sign.signatory | object | Obrigatório. |
digital_sign.signatory.holder | null | Obrigatório. |
digital_sign.signatory.document | string | null | signerIdentification persistido da sessão SafeID; não vem do nome mutável do usuário. Obrigatório. Aceita null. |
digital_sign.signatory.isICPBrasil | null | Obrigatório. |
digital_sign.signatory.validation | object | Obrigatório. |
digital_sign.signatory.validation.valid | null | null: verificação não registrada; nenhum booleano é inferido de status ou hash do arquivo. Obrigatório. |
digital_sign.signatory.validation.description | string | Obrigatório. |
digital_sign.timestamp | object | Obrigatório. |
digital_sign.timestamp.issuer | null | Obrigatório. |
digital_sign.timestamp.dateTimeSignature | null | Obrigatório. |
digital_sign.timestamp.validation | object | Obrigatório. |
digital_sign.timestamp.validation.valid | null | null: verificação não registrada; nenhum booleano é inferido de status ou hash do arquivo. Obrigatório. |
digital_sign.timestamp.validation.description | string | Obrigatório. |
digital_sign.valid | null | Obrigatório. |
application/json · exemplo documentado
{
"id": 102,
"exame_id": 101,
"usuario_id": null,
"html": "<p>Resultado sintético</p>",
"pdf_nome": "current.pdf",
"pdf_path": "https://storage.exemplo.com.br/current.pdf",
"data_criacao": "2026-09-20T12:00:00.000Z",
"data_alteracao": "2026-09-20T12:01:00.000Z",
"status_id": 1,
"data_conclusao": "2026-09-20T12:01:00.000Z",
"endereco_ip": null,
"birads": null,
"digital_sign": {
"signatureRSA": {
"signatureAlgorithm": null,
"algorithmHash": null,
"validation": {
"valid": null,
"description": "Verificação criptográfica não registrada."
}
},
"datetimeSignature": "20/09/2026 09:01:00",
"signatory": {
"holder": null,
"document": "12345678909",
"isICPBrasil": null,
"validation": {
"valid": null,
"description": "Validação da cadeia do certificado não registrada."
}
},
"timestamp": {
"issuer": null,
"dateTimeSignature": null,
"validation": {
"valid": null,
"description": "Carimbo do tempo não verificado."
}
},
"valid": null
}
}
Respostas de erro
404 · Token desconhecido (ou ambíguo); laudo inexistente. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
message | string | array<string> | Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório. |
error | string | Só nos erros de validação ("Bad Request") Opcional. |
application/json · exemplo documentado
{
"error": {
"message": "No integration found for the given token"
}
}
406 · Header `token` ausente (tem precedência sobre `api` inválido), ou header `api` inválido depois de o token ser reconhecido. Token desconhecido responde 404 antes da validação de `api`. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"error_code": 406,
"error_msg": "\"Integration token\" not provided"
}
}
Result - getExams
Lista os exames do paciente (CPF + nascimento)
Notas de compatibilidade
Retorna os exames do paciente no portal de entregas. `cpf` e `dataNasc` (dd/mm/yyyy) são obrigatórios **juntos** — o paciente é identificado pelos dois; o CPF é comparado só por dígitos. `data` limita o período em meses a partir de hoje: 1, 3 ou 12; 0, ausente ou outro valor = sem filtro. `protocolo` (só em get-exams) filtra pelo número de protocolo exato. `status_id` usa a mesma tabela de status de `GET /v1/exam` (cancelados omitidos em mobilemed; -1 no legacy); `viewer_path` é o link público do viewer; `laudo[].pdf_path` é a URL assinada do PDF; `anexos[].file_path` a URL assinada do anexo. `id` e `empresa_id` são inteiros estáveis no perfil mobilemed; legacy mantém UUIDs.
POSThttps://integracao.themishealth.com.br/v1/results/get-exams
Parâmetros
| Campo | Tipo | Descrição |
|---|
api | string | Opcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob". |
cpf | string | CPF do paciente (só os dígitos contam) Obrigatório. |
dataNasc | string | Nascimento, dd/mm/yyyy Obrigatório. |
protocolo | string | Número de protocolo (opcional) Opcional. |
data | integer | Janela em meses: 1, 3 ou 12 (0/ausente = sem filtro) Opcional. |
Exemplos de requisição
application/json · Request-Example (doc MobileMed)
{
"cpf": "12345678910",
"dataNasc": "01/01/2000",
"protocolo": "ABCDE",
"data": 1
}
Respostas de sucesso
200 · OK
| Campo | Tipo | Descrição |
|---|
[].id | integer | string | Perfil mobilemed (padrão de novas credenciais): inteiro positivo estável. Perfil legacy: UUID. O cabeçalho api não seleciona perfil. Obrigatório. |
[].empresa_id | integer | string | Perfil mobilemed (padrão de novas credenciais): inteiro positivo estável. Perfil legacy: UUID. O cabeçalho api não seleciona perfil. Obrigatório. |
[].status_id | integer | Mesma tabela de GET /v1/exam. Cancelados omitidos em mobilemed; -1 somente legacy. Obrigatório. |
[].nome_paciente | string | Obrigatório. |
[].idade_paciente | integer | null | Obrigatório. Aceita null. |
[].estudo_descricao | string | Obrigatório. |
[].data_realizacao | string | null | Obrigatório. Aceita null. |
[].viewer_path | string | Link público do viewer ("" sem imagens) Obrigatório. |
[].count_anexos_paciente | integer | Obrigatório. |
[].laudo | array<object> | Obrigatório. Itens: object. |
[].laudo[].pdf_path | string | URL assinada do PDF ("" sem PDF) Obrigatório. |
[].laudo[].status_id | integer | Obrigatório. |
[].anexos | array<object> | Obrigatório. Itens: object. |
[].anexos[].file_path | string | URL assinada do anexo Obrigatório. |
[].anexos[].is_excluido | boolean | Obrigatório. |
application/json · exemplo documentado
[
{
"id": 101,
"empresa_id": 105,
"status_id": 1,
"nome_paciente": "NOME DO PACIENTE",
"idade_paciente": 26,
"estudo_descricao": "TOMOGRAFIA DE CRANIO",
"data_realizacao": "2026-09-18T14:30:00.000Z",
"viewer_path": "https://laudos.exemplo.com.br/compartilhar/abc123",
"count_anexos_paciente": 1,
"laudo": [
{
"pdf_path": "https://storage.exemplo.com.br/laudos/0b7e2a44.pdf?X-Amz-Signature=…",
"status_id": 1
}
],
"anexos": [
{
"file_path": "https://storage.exemplo.com.br/anexos/9f1c2d3e.pdf?X-Amz-Signature=…",
"is_excluido": false
}
]
}
]
Respostas de erro
400 · Corpo/parâmetros inválidos (validação); CPF sem dígitos; dataNasc fora de dd/mm/yyyy. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
message | string | array<string> | Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório. |
error | string | Só nos erros de validação ("Bad Request") Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"message": [
"comment must be a string"
],
"error": "Bad Request"
}
404 · Token desconhecido (ou ambíguo). Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"message": "No integration found for the given token"
}
}
406 · Header `token` ausente (tem precedência sobre `api` inválido), ou header `api` inválido depois de o token ser reconhecido. Token desconhecido responde 404 antes da validação de `api`. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"error_code": 406,
"error_msg": "\"Integration token\" not provided"
}
}
Result - getExams
Lista os exames do paciente em todo o grupo
Notas de compatibilidade
Retorna os exames do paciente no portal de entregas. `cpf` e `dataNasc` (dd/mm/yyyy) são obrigatórios **juntos** — o paciente é identificado pelos dois; o CPF é comparado só por dígitos. `data` limita o período em meses a partir de hoje: 1, 3 ou 12; 0, ausente ou outro valor = sem filtro. `protocolo` (só em get-exams) filtra pelo número de protocolo exato. `status_id` usa a mesma tabela de status de `GET /v1/exam` (cancelados omitidos em mobilemed; -1 no legacy); `viewer_path` é o link público do viewer; `laudo[].pdf_path` é a URL assinada do PDF; `anexos[].file_path` a URL assinada do anexo. `id` e `empresa_id` são inteiros estáveis no perfil mobilemed; legacy mantém UUIDs. No perfil mobilemed, grupoId é o ID externo ORGANIZATION da credencial: grupo diferente ou não resolvido retorna []; omissão lista a organização atual. Legacy preserva a consulta sem filtro adicional.
POSThttps://integracao.themishealth.com.br/v1/results/get-all-exams
Parâmetros
| Campo | Tipo | Descrição |
|---|
api | string | Opcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob". |
cpf | string | CPF do paciente (só os dígitos contam) Obrigatório. |
dataNasc | string | Nascimento, dd/mm/yyyy Obrigatório. |
data | integer | Janela em meses: 1, 3 ou 12 (0/ausente = sem filtro) Opcional. |
grupoId | integer | string | string | ID externo seguro como número ou texto decimal, ou alias UUID; resolução sempre na organização da credencial. Opcional. |
Exemplos de requisição
application/json · Request-Example (doc MobileMed)
{
"cpf": "12345678910",
"dataNasc": "01/01/2000",
"data": 1,
"grupoId": 1
}
Respostas de sucesso
200 · OK
| Campo | Tipo | Descrição |
|---|
[].id | integer | string | Perfil mobilemed (padrão de novas credenciais): inteiro positivo estável. Perfil legacy: UUID. O cabeçalho api não seleciona perfil. Obrigatório. |
[].empresa_id | integer | string | Perfil mobilemed (padrão de novas credenciais): inteiro positivo estável. Perfil legacy: UUID. O cabeçalho api não seleciona perfil. Obrigatório. |
[].status_id | integer | Mesma tabela de GET /v1/exam. Cancelados omitidos em mobilemed; -1 somente legacy. Obrigatório. |
[].nome_paciente | string | Obrigatório. |
[].idade_paciente | integer | null | Obrigatório. Aceita null. |
[].estudo_descricao | string | Obrigatório. |
[].data_realizacao | string | null | Obrigatório. Aceita null. |
[].viewer_path | string | Link público do viewer ("" sem imagens) Obrigatório. |
[].count_anexos_paciente | integer | Obrigatório. |
[].laudo | array<object> | Obrigatório. Itens: object. |
[].laudo[].pdf_path | string | URL assinada do PDF ("" sem PDF) Obrigatório. |
[].laudo[].status_id | integer | Obrigatório. |
[].anexos | array<object> | Obrigatório. Itens: object. |
[].anexos[].file_path | string | URL assinada do anexo Obrigatório. |
[].anexos[].is_excluido | boolean | Obrigatório. |
application/json · exemplo documentado
[
{
"id": 101,
"empresa_id": 105,
"status_id": 1,
"nome_paciente": "NOME DO PACIENTE",
"idade_paciente": 26,
"estudo_descricao": "TOMOGRAFIA DE CRANIO",
"data_realizacao": "2026-09-18T14:30:00.000Z",
"viewer_path": "https://laudos.exemplo.com.br/compartilhar/abc123",
"count_anexos_paciente": 1,
"laudo": [
{
"pdf_path": "https://storage.exemplo.com.br/laudos/0b7e2a44.pdf?X-Amz-Signature=…",
"status_id": 1
}
],
"anexos": [
{
"file_path": "https://storage.exemplo.com.br/anexos/9f1c2d3e.pdf?X-Amz-Signature=…",
"is_excluido": false
}
]
}
]
Respostas de erro
400 · Corpo/parâmetros inválidos (validação); CPF sem dígitos; dataNasc fora de dd/mm/yyyy. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
message | string | array<string> | Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório. |
error | string | Só nos erros de validação ("Bad Request") Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"message": [
"comment must be a string"
],
"error": "Bad Request"
}
404 · Token desconhecido (ou ambíguo). Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"message": "No integration found for the given token"
}
}
406 · Header `token` ausente (tem precedência sobre `api` inválido), ou header `api` inválido depois de o token ser reconhecido. Token desconhecido responde 404 antes da validação de `api`. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"error_code": 406,
"error_msg": "\"Integration token\" not provided"
}
}
Result - getPais
Lista a tabela de países
Notas de compatibilidade
Lista de países com IDs numéricos estáveis (Brasil=1); novos países não renumeram os anteriores. HTTP 201 mobilemed e HTTP 200 legacy. O exemplo inválido da fonte é representado como array JSON.
GEThttps://integracao.themishealth.com.br/v1/results/getAllPais
Parâmetros
| Campo | Tipo | Descrição |
|---|
api | string | Opcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob". |
Respostas de sucesso
200 · Sucesso — perfil legacy · perfil Legacy
| Campo | Tipo | Descrição |
|---|
[].id | integer | Obrigatório. |
[].nome | string | Obrigatório. |
[].sigla | string | Obrigatório. |
application/json · exemplo documentado
[
{
"id": 1,
"nome": "Brasil",
"sigla": "BR"
},
{
"id": 2,
"nome": "Afeganistão",
"sigla": "AF"
}
]
201 · Sucesso — perfil mobilemed · perfil MobileMed
| Campo | Tipo | Descrição |
|---|
[].id | integer | Obrigatório. |
[].nome | string | Obrigatório. |
[].sigla | string | Obrigatório. |
application/json · exemplo documentado
[
{
"id": 1,
"nome": "Brasil",
"sigla": "BR"
},
{
"id": 2,
"nome": "Afeganistão",
"sigla": "AF"
}
]
Respostas de erro
404 · Token desconhecido (ou ambíguo). Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"message": "No integration found for the given token"
}
}
406 · Header `token` ausente (tem precedência sobre `api` inválido), ou header `api` inválido depois de o token ser reconhecido. Token desconhecido responde 404 antes da validação de `api`. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"error_code": 406,
"error_msg": "\"Integration token\" not provided"
}
}
Result - getReportPdfLink
Link do PDF do laudo
Notas de compatibilidade
URL assinada do PDF do laudo. laudo_hash aceita ID externo REPORT decimal ou UUID. HTTP 201 mobilemed e HTTP 200 legacy; corpo JSON válido {url}. Sem PDF: 404 Report PDF not available.
GEThttps://integracao.themishealth.com.br/v1/results/report-pdf-link/:laudo_hash
Parâmetros
| Campo | Tipo | Descrição |
|---|
laudo_hash | string | ID externo decimal REPORT ou alias UUID Local: path. Obrigatório. |
api | string | Opcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob". |
Respostas de sucesso
200 · Sucesso — perfil legacy · perfil Legacy
| Campo | Tipo | Descrição |
|---|
url | string | Obrigatório. |
application/json · exemplo documentado
{
"url": "https://www.exemplo.com.br/laudo/1602792111470-LQsMdB9EnUIvjvJE_jD_Tt3~VYyD70.pdf"
}
201 · Sucesso — perfil mobilemed · perfil MobileMed
| Campo | Tipo | Descrição |
|---|
url | string | Obrigatório. |
application/json · exemplo documentado
{
"url": "https://www.exemplo.com.br/laudo/1602792111470-LQsMdB9EnUIvjvJE_jD_Tt3~VYyD70.pdf"
}
Respostas de erro
404 · Token desconhecido (ou ambíguo); laudo inexistente; laudo sem PDF gravado. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
message | string | array<string> | Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório. |
error | string | Só nos erros de validação ("Bad Request") Opcional. |
application/json · exemplo documentado
{
"error": {
"message": "No integration found for the given token"
}
}
406 · Header `token` ausente (tem precedência sobre `api` inválido), ou header `api` inválido depois de o token ser reconhecido. Token desconhecido responde 404 antes da validação de `api`. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"error_code": 406,
"error_msg": "\"Integration token\" not provided"
}
}
Result - sendEmail
Envia por e-mail o acesso do paciente ao exame
Notas de compatibilidade
Envia um email sobre o exame: o mesmo e-mail de acesso ao portal de entregas que a recepção manda pela tela, para o endereço informado, sem gravar o e-mail no cadastro do paciente. Resposta 201 sem corpo. **Desvios:** `exame_id` é o ID numérico do exame ou alias UUID (o `id` de `get-exams`). Exame ainda sem paciente vinculado responde **400** com `{ "message": "Exam has no linked patient" }`.
POSThttps://integracao.themishealth.com.br/v1/results/send-email
Parâmetros
| Campo | Tipo | Descrição |
|---|
api | string | Opcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob". |
exame_id | integer | string | string | ID externo seguro como número ou texto decimal, ou alias UUID; resolução sempre na organização da credencial. Obrigatório. |
email | string | Obrigatório. |
Exemplos de requisição
application/json · Exemplo (One Laudos)
{
"exame_id": "6d2c1e0a-7f6b-4c1e-9a1a-3f2b5c8d9e01",
"email": "paciente@exemplo.com.br"
}
application/json · Request-Example (doc MobileMed)
{
"exame_id": 1,
"email": "examplo@exemplo.com.br"
}
Respostas de sucesso
201 · Criado — sem corpo
Corpo de resposta não documentado.
Respostas de erro
400 · Exame inexistente na organização da credencial (ou pertencente a outra organização — o cliente não distingue); Corpo/parâmetros inválidos (validação). Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
message | string | array<string> | Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório. |
error | string | Só nos erros de validação ("Bad Request") Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"message": "Could not find any study"
}
404 · Token desconhecido (ou ambíguo). Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"message": "No integration found for the given token"
}
}
406 · Header `token` ausente (tem precedência sobre `api` inválido), ou header `api` inválido depois de o token ser reconhecido. Token desconhecido responde 404 antes da validação de `api`. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"error_code": 406,
"error_msg": "\"Integration token\" not provided"
}
}
Viewer - getViewerUrl
Link de acesso às imagens do exame
Notas de compatibilidade
Retorna {url}. forMedic=true gera /medico/estudo/:token com audiência physician; false ou omitido gera /compartilhar/:token com audiência patient. Reuso compara audiência e includeFutureReports. Links de integração acompanham FINAL/SIGNED/AMENDED futuros exclusivamente do mesmo exame/organização, com contexto clínico mínimo e imagens antes do laudo. Shares internos restritos mantêm allowedReportIds e include_future_reports=false. Exame sem estudo, cancelado mobilemed, inexistente ou retido para audiência patient retorna 404. A página médica instala cookie DICOM antes do viewer real.
GEThttps://integracao.themishealth.com.br/v1/viewer/:accessionNumber
Parâmetros
| Campo | Tipo | Descrição |
|---|
accessionNumber | string | Accession Number do exame Local: path. Obrigatório. |
forMedic | boolean | (Opcional) Link para o viewer principal dos médicos executantes. Opções disponíveis: true e false (padrão). true retorna /medico/estudo/:token, leitura médica com imagens antes do laudo e laudos finais HTML/texto/PDF; false retorna /compartilhar/:token, sujeito à liberação do paciente. O mesmo link acompanha laudos futuros exclusivamente do exame e organização autorizados. Local: query. Opcional. |
api | string | Opcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob". |
Respostas de sucesso
200 · OK
| Campo | Tipo | Descrição |
|---|
url | string | Obrigatório. |
application/json · exemplo documentado
{
"url": "https://link-do-viewer-publico"
}
Respostas de erro
400 · Corpo/parâmetros inválidos (validação). Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
message | string | array<string> | Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório. |
error | string | Só nos erros de validação ("Bad Request") Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"message": [
"comment must be a string"
],
"error": "Bad Request"
}
404 · Token desconhecido (ou ambíguo); exame sem imagens ou inexistente. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
message | string | array<string> | Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório. |
error | string | Só nos erros de validação ("Bad Request") Opcional. |
application/json · exemplo documentado
{
"error": {
"message": "No integration found for the given token"
}
}
406 · Header `token` ausente (tem precedência sobre `api` inválido), ou header `api` inválido depois de o token ser reconhecido. Token desconhecido responde 404 antes da validação de `api`. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"error_code": 406,
"error_msg": "\"Integration token\" not provided"
}
}
Viewer - getViewerUrlByDate
Links do viewer dos exames de um período
Notas de compatibilidade
Retorna o link de acesso às imagens de todos os exames realizados no período informado (janela de 1 minuto a 31 dias), paginado (20 por página, máximo 20). Só entram exames que já receberam imagens. Período fora da janela ou data mal formada responde 400 `Invalid period`.
GEThttps://integracao.themishealth.com.br/v1/viewer/list/bydate
Parâmetros
| Campo | Tipo | Descrição |
|---|
dataInicial | string | Data/hora inicial do período, no formato YYYYMMDDTHHmm (ex: 20260514T0900) Local: query. Obrigatório. |
dataFinal | string | Data/hora final do período, no formato YYYYMMDDTHHmm (ex: 20260514T1000) Local: query. Obrigatório. |
forMedic | boolean | (Opcional) Link para o viewer principal dos médicos executantes. Opções disponíveis: true e false (padrão). true retorna /medico/estudo/:token, leitura médica com imagens antes do laudo e laudos finais HTML/texto/PDF; false retorna /compartilhar/:token, sujeito à liberação do paciente. O mesmo link acompanha laudos futuros exclusivamente do exame e organização autorizados. Local: query. Opcional. |
page | integer | (Opcional) Página da listagem. Padrão: 1. Local: query. Opcional. |
pageSize | integer | (Opcional) Quantidade de exames por página. Padrão: 20. Máximo: 20. Local: query. Opcional. |
api | string | Opcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob". |
Respostas de sucesso
200 · OK
| Campo | Tipo | Descrição |
|---|
exams | array<object> | Obrigatório. Itens: object. |
exams[].accessionNumber | string | null | Obrigatório. Aceita null. |
exams[].patient | object | Obrigatório. |
exams[].patient.codigo_paciente | string | null | Obrigatório. Aceita null. |
exams[].patient.name | string | Obrigatório. |
exams[].description | string | null | Obrigatório. Aceita null. |
exams[].studyDate | string | null | Obrigatório. Aceita null. |
exams[].url | string | Obrigatório. |
pagination | object | Obrigatório. |
pagination.totalExams | integer | Obrigatório. |
pagination.totalPages | integer | Obrigatório. |
pagination.currentPage | integer | Obrigatório. |
pagination.currentPageTotal | integer | Obrigatório. |
application/json · exemplo documentado
{
"exams": [
{
"accessionNumber": "12313123",
"patient": {
"codigo_paciente": "PAC001",
"name": "Fulano de Tal"
},
"description": "Tomografia de crânio",
"studyDate": "2026-07-28",
"url": "https://link-do-viewer-publico"
}
],
"pagination": {
"totalExams": 1,
"totalPages": 1,
"currentPage": 1,
"currentPageTotal": 1
}
}
Respostas de erro
400 · Corpo/parâmetros inválidos (validação); janela inválida. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
message | string | array<string> | Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório. |
error | string | Só nos erros de validação ("Bad Request") Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"message": [
"comment must be a string"
],
"error": "Bad Request"
}
404 · Token desconhecido (ou ambíguo). Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"message": "No integration found for the given token"
}
}
406 · Header `token` ausente (tem precedência sobre `api` inválido), ou header `api` inválido depois de o token ser reconhecido. Token desconhecido responde 404 antes da validação de `api`. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"error_code": 406,
"error_msg": "\"Integration token\" not provided"
}
}
Worklist - createWorklist
Cria (ou reconfirma) um item de worklist
Notas de compatibilidade
Cada chamada aceita conserva JSON completo (incluindo extras, false/0/null) ou XML original com sua estrutura parseada. Perfil mobilemed: sem adapter explícito/padrão tenta projetar os formatos MobileMed/KAI conhecidos; entrada genérica sem projeção fica RAW_ONLY, sem paciente/exame fabricado. Sucesso sempre 201 {} incluindo noop. Perfil legacy mantém validação obrigatória do DTO e corpos created 201/noop 200. Adapter selecionado pelo header adapter ou defaultWorklistAdapter da credencial deve existir e produzir projeção válida (400 caso contrário). Mapeamentos declarativos podem ser salvos e recebimentos reprocessados na administração. Conflito de identidade por accession permanece 409. Estado assinado nunca é importado por worklist.
POSThttps://integracao.themishealth.com.br/v1/worklist
Parâmetros
| Campo | Tipo | Descrição |
|---|
api | string | Opcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob". |
adapter | string | Nome salvo nesta credencial, ou preset mobilemed/kai. Local: header. Opcional. |
patient_id | string | integer | Código do paciente no sistema de origem Opcional. |
patient_name | string | Nome do paciente (obrigatório) Opcional. |
patient_birthdate | string | yyyy-mm-dd (ou yyyymmdd) Opcional. |
patient_sex | string | Opcional. Valores: "M", "F", "O", "U". |
patient_cpf | string | Só dígitos Opcional. |
accession_number | string | integer | Único na organização, até 16 caracteres (obrigatório) Opcional. |
referring_physician | string | Médico solicitante Opcional. |
modality | string | Sigla DICOM (CT, MR, MG, US, CR, DX…) (obrigatório) Opcional. |
study_description | string | Opcional. |
date_exam | string | yyyy-mm-dd (ou yyyymmdd) (obrigatório) Opcional. |
time_exam | string | hh:mm:ss (ou hhmmss) (obrigatório) Opcional. |
insurence_plan | string | Convênio (sic, grafia da MobileMed) Opcional. |
patient_comments | any | Preservado na fonte; não produz campo operacional. Opcional. |
register_read | any | Preservado na fonte; não produz campo operacional. Opcional. |
Exemplos de requisição
application/json · Request-Example — snake_case (doc MobileMed)
{
"patient_id": 12345,
"patient_name": "Joao da Silva",
"patient_birthdate": "1985-04-12",
"patient_sex": "M",
"accession_number": 987654,
"referring_physician": "Dra. Maria Oliveira",
"modality": "CT",
"study_description": "Tomografia de cranio",
"date_exam": "2026-08-19",
"time_exam": "14:30:00",
"insurence_plan": "Particular",
"patient_comments": 1,
"patient_cpf": "12345678900",
"register_read": false
}
application/json · PascalCase (MobileWorklist / KAI / carretas)
{
"PatientId": "12345",
"PatientName": "JOAO DA SILVA",
"PatientBirthdate": "19850412",
"PatientSex": "M",
"PatientCpf": "12345678900",
"AccessionNumber": "ACC987654",
"ReferringPhysician": "Dra. Maria Oliveira",
"Modality": "CT",
"StudyDescription": "TOMOGRAFIA DE CRANIO",
"InsurencePlan": "Particular",
"Date": "20260819",
"Time": "143000"
}
application/xml · XML-Request-Example — <worklist> (doc MobileMed)
<worklist>
<patient_id>12345</patient_id>
<patient_name>Joao da Silva</patient_name>
<patient_birthdate>1985-04-12</patient_birthdate>
<patient_sex>M</patient_sex>
<accession_number>987654</accession_number>
<modality>CT</modality>
<study_description>Tomografia de cranio</study_description>
<date_exam>2026-08-19</date_exam>
<time_exam>14:30:00</time_exam>
</worklist>
application/xml · <MWL_ITEM> (Guardião Pixeon)
<?xml version="1.0" encoding="UTF-8"?>
<MWL_ITEM>
<PatientId>1</PatientId>
<PatientName><![CDATA[JOSÉ DA SILVA]]></PatientName>
<PatientBirthdate>19990131</PatientBirthdate>
<PatientSex>M</PatientSex>
<AccessionNumber>M00001</AccessionNumber>
<ReferringPhysician><![CDATA[Dr. MobileMed]]></ReferringPhysician>
<Modality>CT</Modality>
<StudyDescription><![CDATA[TOMOGRAFIA DE CRÂNIO]]></StudyDescription>
<Date>20201021</Date>
<Time>103155</Time>
<InsurencePlan>CONVENIO</InsurencePlan>
<PatientComments></PatientComments>
<PatientCpf>19119119100</PatientCpf>
</MWL_ITEM>
Respostas de sucesso
200 · Somente legacy: repetição idempotente. · perfil Legacy
| Campo | Tipo | Descrição |
|---|
accession_number | string | Obrigatório. |
status | string | Obrigatório. Valores: "created", "noop", "updated". |
application/json · exemplo documentado
{
"accession_number": "987654",
"status": "noop"
}
201 · Mobilemed: fonte aceita (RAW_ONLY ou PROJECTED), inclusive noop. Legacy: criação. · perfil MobileMed
| Campo | Tipo | Descrição |
|---|
accession_number | string | Obrigatório. |
status | string | Obrigatório. Valores: "created", "noop", "updated". |
application/json · exemplo documentado
{
"accession_number": "987654",
"status": "created"
}
Respostas de erro
400 · Dados inválidos para a worklist — `message` é um array de mensagens. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
message | string | array<string> | Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório. |
error | string | Só nos erros de validação ("Bad Request") Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"message": [
"PatientName should not be empty",
"AccessionNumber must be 1..16 chars (DICOM limit)",
"Date must be yyyymmdd"
]
}
404 · Token desconhecido (ou ambíguo). Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"message": "No integration found for the given token"
}
}
406 · Header `token` ausente (tem precedência sobre `api` inválido), ou header `api` inválido depois de o token ser reconhecido. Token desconhecido responde 404 antes da validação de `api`. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
error | object | Obrigatório. |
error.error_code | integer | Opcional. |
error.error_msg | string | Opcional. |
error.message | string | Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"error": {
"error_code": 406,
"error_msg": "\"Integration token\" not provided"
}
}
409 · Accession Number já existe na organização. Somente legacy identificado recebe statusCode, timestamp e path.
| Campo | Tipo | Descrição |
|---|
message | string | array<string> | Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório. |
error | string | Só nos erros de validação ("Bad Request") Opcional. |
statusCode | integer | Opcional. |
timestamp | string | Opcional. |
path | string | Opcional. |
application/json · exemplo documentado
{
"message": "Accession 987654 already exists for organization … with different fields: patientName. Either retry with the same payload or PATCH explicitly.",
"error": "Conflict"
}