One Laudos API

API pública para integrações

Autenticaçãotoken: SEU_TOKEN_DE_INTEGRACAO

Exame - createComment

Cria comentário no exame

Notas de compatibilidade

Cria comentário para o exame. Opcionalmente muda o status do exame junto com o comentário — só é permitida a alteração quando o exame ainda não foi assinado. Opções disponíveis para `status`: 0 para novo (a ser laudado), 3 para pendente e 7 para reconvocar. Sem `status`, o comentário é só registrado (vale mesmo em exame assinado). Com `status`, um exame já assinado responde 400 `Exam already signed, no changes allowed`. A doc da MobileMed ilustra o corpo de sucesso como `{ "Comment was created successfully" }` (JSON inválido); o One Laudos responde `{ "message": "Comment was created successfully" }`.

POST
https://integracao.themishealth.com.br/v1/exam/:accessionNumber/comment

Parâmetros

CampoTipoDescrição
accessionNumberstringAccession Number do exame Local: path. Obrigatório.
apistringOpcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob".
commentstringObrigatório.
statusintegerNovo status do exame (0 novo, 3 pendente, 7 reconvocar). Aceito também como string ("3"). Opcional. Valores: 0, 3, 7.

Exemplos de requisição

application/json · Request-Example (doc MobileMed)
{
  "comment": "Example of a comment body",
  "status": 0
}

Respostas de sucesso

200 · OK

CampoTipoDescrição
messagestringObrigatório.
application/json · exemplo documentado
{
  "message": "Comment was created 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.

CampoTipoDescrição
messagestring | array<string>Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório.
errorstringSó nos erros de validação ("Bad Request") Opcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
application/json · exemplo documentado
{
  "message": "Could not find any study"
}

404 · Token desconhecido (ou ambíguo). Somente legacy identificado recebe statusCode, timestamp e path.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
application/json · exemplo documentado
{
  "error": {
    "error_code": 406,
    "error_msg": "\"Integration token\" not provided"
  }
}

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.

GET
https://integracao.themishealth.com.br/v1/exam/:accessionNumber

Parâmetros

CampoTipoDescrição
accessionNumberstringAccession Number do exame Local: path. Obrigatório.
formatstringFormato 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".
base64stringRetorno do laudo em base64. Opções disponíveis: true e false. Padrão: true quando `format` é informado. Local: header. Opcional. Valores: "true", "false".
groupstringAgrupa 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".
marcacaoClinicastringRetorno de marcações clínicas do exame (`clinicalMarkings`). Opções disponíveis: true e false. Local: header. Opcional. Valores: "true", "false".
apistringOpcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob".

Respostas de sucesso

200 · OK

CampoTipoDescrição
studyobjectO `study` de `GET /v1/exam/{accessionNumber}` — e o mesmo objeto que vai no webhook `report.signed`. Obrigatório.
study.idinteger | stringPerfil mobilemed (padrão de novas credenciais): inteiro positivo estável. Perfil legacy: UUID. O cabeçalho api não seleciona perfil. Obrigatório.
study.accessionNumberstring | nullObrigatório. Aceita null.
study.studyUIDstring | nullStudy Instance UID; null enquanto as imagens não chegam Obrigatório. Aceita null.
study.studyDatestring | nullData de realização (ou agendamento), no fuso da credencial Obrigatório. Aceita null.
study.companyobjectObrigatório.
study.company.namestringNome da organização Obrigatório.
study.auxiliaryField01string | nullObrigatório. Aceita null.
study.descriptionstring | nullObrigatório. Aceita null.
study.modalitystringObrigatório.
study.statusany0 a 11 conforme procedência clínica. Cancelados são omitidos em mobilemed; legacy pode retornar -1 Cancelado. Obrigatório.
study.priorityany1 Rotina, 2 Ambulatório, 3 Urgência, 4 Emergência, 5 Plantão, 6 Internado Obrigatório.
study.clinicalMarkingsarray<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[].idintegerObrigatório.
study.clinicalMarkings[].descriptionstringObrigatório.
study.patientobjectObrigatório.
study.patient.codigo_pacientestring | nullIdentificador do paciente como veio na worklist (patient_id/PatientId) Obrigatório. Aceita null.
study.patient.namestringObrigatório.
study.patient.birthdaystring | nullObrigatório. Aceita null.
study.patient.sexstringObrigatório. Valores: "M", "F", "O".
study.publicViewerUrlstring | nullLink público do viewer; null enquanto não há imagens Obrigatório. Aceita null.
study.reportobject | nullObrigatório.
study.report.idinteger | stringPerfil 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.publishedAtstring | nullData/hora da assinatura Obrigatório. Aceita null.
study.report.performingPhysicianobject | nullObrigatório.
study.report.performingPhysician.namestringNome do signatário; sem signatário cadastrado, o nome livre do laudo ou o nome da credencial Obrigatório.
study.report.performingPhysician.crmobjectObrigatório.
study.report.performingPhysician.crm.codeinteger | string | nullmobilemed: 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.ufstring | nullObrigatório. Aceita null.
study.report.performingPhysician.emailstring | nullObrigatório. Aceita null.
study.report.contentstring | nullSem 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.groupedContentarray<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.

CampoTipoDescrição
messagestring | array<string>Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório.
errorstringSó nos erros de validação ("Bad Request") Opcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
application/json · exemplo documentado
{
  "message": "Could not find any study"
}

404 · Token desconhecido (ou ambíguo). Somente legacy identificado recebe statusCode, timestamp e path.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

GET
https://integracao.themishealth.com.br/v1/exam/studyUID/:studyUID

Parâmetros

CampoTipoDescrição
studyUIDstringStudyUID (Study Instance UID) do exame Local: path. Obrigatório.
formatstringFormato 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".
base64stringRetorno do laudo em base64. Opções disponíveis: true e false. Padrão: true quando `format` é informado. Local: header. Opcional. Valores: "true", "false".
groupstringAgrupa 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".
marcacaoClinicastringRetorno de marcações clínicas do exame (`clinicalMarkings`). Opções disponíveis: true e false. Local: header. Opcional. Valores: "true", "false".
apistringOpcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob".

Respostas de sucesso

200 · OK

CampoTipoDescrição
studyanyObrigatório.
associatedExamsarray<object>Obrigatório. Itens: object.
associatedExams[].studyanyObrigató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.

CampoTipoDescrição
messagestring | array<string>Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório.
errorstringSó nos erros de validação ("Bad Request") Opcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
application/json · exemplo documentado
{
  "message": "Could not find any study"
}

404 · Token desconhecido (ou ambíguo). Somente legacy identificado recebe statusCode, timestamp e path.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
application/json · exemplo documentado
{
  "error": {
    "error_code": 406,
    "error_msg": "\"Integration token\" not provided"
  }
}

Exame - getComments

Lista os comentários do exame

Notas de compatibilidade

Retorna uma array de comentários feitos no exame, de acordo com o Accession Number fornecido, do mais antigo para o mais novo. Datas no formato `YYYY-MM-DD HH:mm`, no fuso da credencial.

GET
https://integracao.themishealth.com.br/v1/exam/:accessionNumber/comments

Parâmetros

CampoTipoDescrição
accessionNumberstringAccession Number do exame Local: path. Obrigatório.
apistringOpcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob".

Respostas de sucesso

200 · OK

CampoTipoDescrição
[].comentariostringObrigatório.
[].data_criacaostringObrigatório.
[].data_alteracaostringObrigatório.
application/json · exemplo documentado
[
  {
    "comentario": "Comentário exemplo 1",
    "data_criacao": "2023-03-03 02:01",
    "data_alteracao": "2023-03-03 02:01"
  },
  {
    "comentario": "Comentário exemplo 2",
    "data_criacao": "2023-03-03 02:01",
    "data_alteracao": "2023-03-03 02:01"
  }
]

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.

CampoTipoDescrição
messagestring | array<string>Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório.
errorstringSó nos erros de validação ("Bad Request") Opcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
application/json · exemplo documentado
{
  "message": "Could not find any study"
}

404 · Token desconhecido (ou ambíguo). Somente legacy identificado recebe statusCode, timestamp e path.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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á.

GET
https://integracao.themishealth.com.br/v1/exam/logs/integration

Parâmetros

CampoTipoDescrição
successbooleanRetorno 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.
startDatestringData do começo do relatório. Formato YYYY-MM-DD. Local: query. Opcional.
finalDatestringData do fim do relatório. Formato YYYY-MM-DD. Local: query. Opcional.
pageintegerNúmero da página do relatório (padrão 1). Local: query. Opcional.
xlsxbooleanRetorno do relatório em um link para download em formato xlsx. Opções disponíveis: true e false. Local: query. Opcional.
apistringOpcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob".

Respostas de sucesso

200 · OK

CampoTipoDescrição
totalLogsobjectObrigatório.
totalLogs.totalintegerObrigatório.
totalLogs.pagesintegerObrigatório.
logsarray<object>Obrigatório. Itens: object.
logs[].accessionNumberstring | nullObrigatório. Aceita null.
logs[].studyIUIDstring | nullObrigatório. Aceita null.
logs[].codigoPedidointeger | string | nullmobilemed: código decimal seguro ou ID EXAM_ORDER de pedido ativo comprovado; null caso indisponível. legacy: texto original. Obrigatório. Aceita null.
logs[].statusRetornointeger | nullHTTP da chamada recebida ou da entrega do webhook Obrigatório. Aceita null.
logs[].descricaoErrostring | nullObrigatório. Aceita null.
logs[].codigoPedidoOriginalstringExtensão mobilemed quando o código original não pode ser representado numericamente. Opcional.
urlstringObrigató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.

CampoTipoDescrição
messagestring | array<string>Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório.
errorstringSó nos erros de validação ("Bad Request") Opcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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": [] }`.

GET
https://integracao.themishealth.com.br/v1/exam/:accessionNumber/keyimages

Parâmetros

CampoTipoDescrição
accessionNumberstringAccession Number do exame Local: path. Obrigatório.
apistringOpcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob".

Respostas de sucesso

200 · OK

CampoTipoDescrição
imagesarray<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.

CampoTipoDescrição
messagestring | array<string>Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório.
errorstringSó nos erros de validação ("Bad Request") Opcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
application/json · exemplo documentado
{
  "message": "Could not find any study"
}

404 · Token desconhecido (ou ambíguo). Somente legacy identificado recebe statusCode, timestamp e path.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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" }`.

POST
https://integracao.themishealth.com.br/v1/exam/:accessionNumber/report

Parâmetros

CampoTipoDescrição
accessionNumberstringAccession Number do exame, ou a palavra `study` para usar o `studyIUID` do body Local: path. Obrigatório.
apistringOpcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob".
reportFormatstringSem distinção de caixa Obrigatório. Valores: "html", "rtf", "pdf".
reportstringDocumento em base64 (ou data URL) Obrigatório.
physicianCrmUfstring"<crm>-<uf>" do médico executante; obrigatório quando useIntegrationUser não é true Opcional.
useIntegrationUserbooleantrue: assina em nome da credencial (sem médico) Opcional.
studyIUIDstringLocalizador 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

CampoTipoDescrição
messagestringObrigató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.

CampoTipoDescrição
messagestring | array<string>Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório.
errorstringSó nos erros de validação ("Bad Request") Opcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
messagestring | array<string>Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório.
errorstringSó 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.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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."}.

POST
https://integracao.themishealth.com.br/v1/exam/reintegrateReports

Parâmetros

CampoTipoDescrição
apistringOpcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob".
accessionNumbersarray<object>Obrigatório. Itens: object.
accessionNumbers[].accessionNumberstringObrigatório.

Exemplos de requisição

application/json · Request-Example (doc MobileMed)
{
  "accessionNumbers": [
    {
      "accessionNumber": "12345"
    },
    {
      "accessionNumber": "23456"
    },
    {
      "accessionNumber": "34567"
    }
  ]
}

Respostas de sucesso

200 · OK

CampoTipoDescrição
messagestringObrigató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.

CampoTipoDescrição
messagestring | array<string>Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório.
errorstringSó nos erros de validação ("Bad Request") Opcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

POST
https://integracao.themishealth.com.br/v1/exam/:accessionNumber/replicate

Parâmetros

CampoTipoDescrição
accessionNumberstringAccession Number da entrada principal do exame Local: path. Obrigatório.
apistringOpcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob".
examsarray<object>Obrigatório. Itens: object.
exams[].accessionNumberstringObrigatório.
exams[].studyDescriptionstringOpcional.

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

CampoTipoDescrição
messagestringObrigató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.

CampoTipoDescrição
messagestring | array<string>Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório.
errorstringSó nos erros de validação ("Bad Request") Opcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
application/json · exemplo documentado
{
  "message": "Could not find any study"
}

404 · Token desconhecido (ou ambíguo). Somente legacy identificado recebe statusCode, timestamp e path.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

CampoTipoDescrição
messagestring | array<string>Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório.
errorstringSó nos erros de validação ("Bad Request") Opcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

POST
https://integracao.themishealth.com.br/v1/exam/:accessionNumber/mammography

Parâmetros

CampoTipoDescrição
accessionNumberstringAccession Number do exame Local: path. Obrigatório.
apistringOpcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob".
mammographyobjectFicha 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

CampoTipoDescrição
messagestringObrigató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.

CampoTipoDescrição
messagestring | array<string>Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório.
errorstringSó nos erros de validação ("Bad Request") Opcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
application/json · exemplo documentado
{
  "message": "Could not find any study"
}

404 · Token desconhecido (ou ambíguo). Somente legacy identificado recebe statusCode, timestamp e path.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

POST
https://integracao.themishealth.com.br/v1/exam/:accessionNumber/attachment

Parâmetros

CampoTipoDescrição
accessionNumberstringAccession Number do exame Local: path. Obrigatório.
apistringOpcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob".
attachmentsarray<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

CampoTipoDescrição
messagestringObrigató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.

CampoTipoDescrição
messagestring | array<string>Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório.
errorstringSó nos erros de validação ("Bad Request") Opcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
application/json · exemplo documentado
{
  "message": "Could not find any study"
}

404 · Token desconhecido (ou ambíguo). Somente legacy identificado recebe statusCode, timestamp e path.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

POST
https://integracao.themishealth.com.br/v1/exam/:accessionNumber/resident-physician

Parâmetros

CampoTipoDescrição
accessionNumberstringAccession Number do exame Local: path. Obrigatório.
apistringOpcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob".
crm_ufstringObrigatório.

Exemplos de requisição

application/json · Request-Example (doc MobileMed)
{
  "crm_uf": "12345-SP"
}

Respostas de sucesso

200 · OK

CampoTipoDescrição
messagestringObrigató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.

CampoTipoDescrição
messagestring | array<string>Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório.
errorstringSó nos erros de validação ("Bad Request") Opcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
messagestring | array<string>Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório.
errorstringSó 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.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

POST
https://integracao.themishealth.com.br/v1/exam/:accessionNumber/priority

Parâmetros

CampoTipoDescrição
accessionNumberstringAccession Number do exame Local: path. Obrigatório.
apistringOpcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob".
priority_idinteger | string1 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

CampoTipoDescrição
messagestringObrigató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.

CampoTipoDescrição
messagestring | array<string>Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório.
errorstringSó nos erros de validação ("Bad Request") Opcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
application/json · exemplo documentado
{
  "message": "Could not find any study"
}

404 · Token desconhecido (ou ambíguo). Somente legacy identificado recebe statusCode, timestamp e path.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

POST
https://integracao.themishealth.com.br/v1/exam/:accessionNumber/release

Parâmetros

CampoTipoDescrição
accessionNumberstringAccession Number do exame Local: path. Obrigatório.
apistringOpcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob".
releasebooleanAceita também "true"/"false". Obrigatório.

Exemplos de requisição

application/json · Request-Example (doc MobileMed)
{
  "release": true
}

Respostas de sucesso

200 · OK

CampoTipoDescrição
messagestringObrigató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.

CampoTipoDescrição
messagestring | array<string>Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório.
errorstringSó nos erros de validação ("Bad Request") Opcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
application/json · exemplo documentado
{
  "message": "Could not find any study"
}

404 · Token desconhecido (ou ambíguo). Somente legacy identificado recebe statusCode, timestamp e path.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

POST
https://integracao.themishealth.com.br/v1/exam/:accessionNumber/description

Parâmetros

CampoTipoDescrição
accessionNumberstringAccession Number do exame Local: path. Obrigatório.
apistringOpcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob".
descriptionstringObrigatório.

Exemplos de requisição

application/json · Request-Example (doc MobileMed)
{
  "description": "Example of a Description"
}

Respostas de sucesso

200 · OK

CampoTipoDescrição
messagestringObrigató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.

CampoTipoDescrição
messagestring | array<string>Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório.
errorstringSó nos erros de validação ("Bad Request") Opcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
application/json · exemplo documentado
{
  "message": "Could not find any study"
}

404 · Token desconhecido (ou ambíguo). Somente legacy identificado recebe statusCode, timestamp e path.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

GET
https://integracao.themishealth.com.br/v1/physician

Parâmetros

CampoTipoDescrição
crmstringCRM do médico Local: query. Obrigatório.
ufstringUF do CRM do médico Local: query. Obrigatório.
apistringOpcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob".

Respostas de sucesso

200 · OK

CampoTipoDescrição
physicianobjectObrigatório.
physician.namestringObrigatório.
physician.crmobjectObrigatório.
physician.crm.codeinteger | string | nullmobilemed: 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.ufstringObrigatório.
physician.signaturestring | nullImagem 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.

CampoTipoDescrição
messagestring | array<string>Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório.
errorstringSó nos erros de validação ("Bad Request") Opcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
messagestring | array<string>Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório.
errorstringSó 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.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

POST
https://integracao.themishealth.com.br/v1/results/add-print-count

Parâmetros

CampoTipoDescrição
apistringOpcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob".
exam_idinteger | string | stringID 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.

CampoTipoDescrição
messagestring | array<string>Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório.
errorstringSó nos erros de validação ("Bad Request") Opcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
application/json · exemplo documentado
{
  "message": "Could not find any study"
}

404 · Token desconhecido (ou ambíguo). Somente legacy identificado recebe statusCode, timestamp e path.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

GET
https://integracao.themishealth.com.br/v1/results/signed/:code

Parâmetros

CampoTipoDescrição
codestringID externo decimal REPORT ou alias UUID Local: path. Obrigatório.
apistringOpcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob".

Respostas de sucesso

200 · Sucesso — perfil legacy · perfil Legacy

CampoTipoDescrição
idstringUUID do laudo Obrigatório.
exame_idstringObrigatório.
usuario_idstring | nullQuem assinou (null para laudo externo assinado pela credencial) Obrigatório. Aceita null.
htmlstringObrigatório.
signed_atstring | nullObrigatório. Aceita null.
signatureobject | nullDocumento assinado ICP-Brasil mais recente; null quando só há assinatura eletrônica simples Obrigatório.
signature.statusstringObrigatório.
signature.storage_keystringObrigató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

CampoTipoDescrição
idintegerObrigatório.
exame_idintegerObrigatório.
usuario_idinteger | nullObrigatório.
htmlstringObrigatório.
pdf_nomestring | nullObrigatório. Aceita null.
pdf_pathstring | nullURL assinada do PDF selecionado, ou null. Obrigatório. Aceita null.
data_criacaostringObrigatório.
data_alteracaostringObrigatório.
status_idintegerObrigatório.
data_conclusaostring | nullObrigatório. Aceita null.
endereco_ipnullNão há IP de assinatura persistido; nunca usa o IP desta consulta. Obrigatório.
biradsstring | nullObrigatório. Aceita null.
digital_signobject | nullObrigatório.
digital_sign.signatureRSAobjectObrigatório.
digital_sign.signatureRSA.signatureAlgorithmnullObrigatório.
digital_sign.signatureRSA.algorithmHashnullObrigatório.
digital_sign.signatureRSA.validationobjectObrigatório.
digital_sign.signatureRSA.validation.validnullnull: verificação não registrada; nenhum booleano é inferido de status ou hash do arquivo. Obrigatório.
digital_sign.signatureRSA.validation.descriptionstringObrigatório.
digital_sign.datetimeSignaturestring | nullHorá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.signatoryobjectObrigatório.
digital_sign.signatory.holdernullObrigatório.
digital_sign.signatory.documentstring | nullsignerIdentification persistido da sessão SafeID; não vem do nome mutável do usuário. Obrigatório. Aceita null.
digital_sign.signatory.isICPBrasilnullObrigatório.
digital_sign.signatory.validationobjectObrigatório.
digital_sign.signatory.validation.validnullnull: verificação não registrada; nenhum booleano é inferido de status ou hash do arquivo. Obrigatório.
digital_sign.signatory.validation.descriptionstringObrigatório.
digital_sign.timestampobjectObrigatório.
digital_sign.timestamp.issuernullObrigatório.
digital_sign.timestamp.dateTimeSignaturenullObrigatório.
digital_sign.timestamp.validationobjectObrigatório.
digital_sign.timestamp.validation.validnullnull: verificação não registrada; nenhum booleano é inferido de status ou hash do arquivo. Obrigatório.
digital_sign.timestamp.validation.descriptionstringObrigatório.
digital_sign.validnullObrigató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.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
messagestring | array<string>Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório.
errorstringSó 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.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

POST
https://integracao.themishealth.com.br/v1/results/get-exams

Parâmetros

CampoTipoDescrição
apistringOpcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob".
cpfstringCPF do paciente (só os dígitos contam) Obrigatório.
dataNascstringNascimento, dd/mm/yyyy Obrigatório.
protocolostringNúmero de protocolo (opcional) Opcional.
dataintegerJanela 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

CampoTipoDescrição
[].idinteger | stringPerfil mobilemed (padrão de novas credenciais): inteiro positivo estável. Perfil legacy: UUID. O cabeçalho api não seleciona perfil. Obrigatório.
[].empresa_idinteger | stringPerfil mobilemed (padrão de novas credenciais): inteiro positivo estável. Perfil legacy: UUID. O cabeçalho api não seleciona perfil. Obrigatório.
[].status_idintegerMesma tabela de GET /v1/exam. Cancelados omitidos em mobilemed; -1 somente legacy. Obrigatório.
[].nome_pacientestringObrigatório.
[].idade_pacienteinteger | nullObrigatório. Aceita null.
[].estudo_descricaostringObrigatório.
[].data_realizacaostring | nullObrigatório. Aceita null.
[].viewer_pathstringLink público do viewer ("" sem imagens) Obrigatório.
[].count_anexos_pacienteintegerObrigatório.
[].laudoarray<object>Obrigatório. Itens: object.
[].laudo[].pdf_pathstringURL assinada do PDF ("" sem PDF) Obrigatório.
[].laudo[].status_idintegerObrigatório.
[].anexosarray<object>Obrigatório. Itens: object.
[].anexos[].file_pathstringURL assinada do anexo Obrigatório.
[].anexos[].is_excluidobooleanObrigató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.

CampoTipoDescrição
messagestring | array<string>Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório.
errorstringSó nos erros de validação ("Bad Request") Opcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

POST
https://integracao.themishealth.com.br/v1/results/get-all-exams

Parâmetros

CampoTipoDescrição
apistringOpcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob".
cpfstringCPF do paciente (só os dígitos contam) Obrigatório.
dataNascstringNascimento, dd/mm/yyyy Obrigatório.
dataintegerJanela em meses: 1, 3 ou 12 (0/ausente = sem filtro) Opcional.
grupoIdinteger | string | stringID 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

CampoTipoDescrição
[].idinteger | stringPerfil mobilemed (padrão de novas credenciais): inteiro positivo estável. Perfil legacy: UUID. O cabeçalho api não seleciona perfil. Obrigatório.
[].empresa_idinteger | stringPerfil mobilemed (padrão de novas credenciais): inteiro positivo estável. Perfil legacy: UUID. O cabeçalho api não seleciona perfil. Obrigatório.
[].status_idintegerMesma tabela de GET /v1/exam. Cancelados omitidos em mobilemed; -1 somente legacy. Obrigatório.
[].nome_pacientestringObrigatório.
[].idade_pacienteinteger | nullObrigatório. Aceita null.
[].estudo_descricaostringObrigatório.
[].data_realizacaostring | nullObrigatório. Aceita null.
[].viewer_pathstringLink público do viewer ("" sem imagens) Obrigatório.
[].count_anexos_pacienteintegerObrigatório.
[].laudoarray<object>Obrigatório. Itens: object.
[].laudo[].pdf_pathstringURL assinada do PDF ("" sem PDF) Obrigatório.
[].laudo[].status_idintegerObrigatório.
[].anexosarray<object>Obrigatório. Itens: object.
[].anexos[].file_pathstringURL assinada do anexo Obrigatório.
[].anexos[].is_excluidobooleanObrigató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.

CampoTipoDescrição
messagestring | array<string>Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório.
errorstringSó nos erros de validação ("Bad Request") Opcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

GET
https://integracao.themishealth.com.br/v1/results/getAllPais

Parâmetros

CampoTipoDescrição
apistringOpcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob".

Respostas de sucesso

200 · Sucesso — perfil legacy · perfil Legacy

CampoTipoDescrição
[].idintegerObrigatório.
[].nomestringObrigatório.
[].siglastringObrigatório.
application/json · exemplo documentado
[
  {
    "id": 1,
    "nome": "Brasil",
    "sigla": "BR"
  },
  {
    "id": 2,
    "nome": "Afeganistão",
    "sigla": "AF"
  }
]

201 · Sucesso — perfil mobilemed · perfil MobileMed

CampoTipoDescrição
[].idintegerObrigatório.
[].nomestringObrigatório.
[].siglastringObrigató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.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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" }`.

POST
https://integracao.themishealth.com.br/v1/results/send-email

Parâmetros

CampoTipoDescrição
apistringOpcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob".
exame_idinteger | string | stringID externo seguro como número ou texto decimal, ou alias UUID; resolução sempre na organização da credencial. Obrigatório.
emailstringObrigató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.

CampoTipoDescrição
messagestring | array<string>Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório.
errorstringSó nos erros de validação ("Bad Request") Opcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
application/json · exemplo documentado
{
  "message": "Could not find any study"
}

404 · Token desconhecido (ou ambíguo). Somente legacy identificado recebe statusCode, timestamp e path.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

GET
https://integracao.themishealth.com.br/v1/viewer/:accessionNumber

Parâmetros

CampoTipoDescrição
accessionNumberstringAccession Number do exame Local: path. Obrigatório.
forMedicboolean(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.
apistringOpcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob".

Respostas de sucesso

200 · OK

CampoTipoDescrição
urlstringObrigató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.

CampoTipoDescrição
messagestring | array<string>Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório.
errorstringSó nos erros de validação ("Bad Request") Opcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
messagestring | array<string>Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório.
errorstringSó 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.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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`.

GET
https://integracao.themishealth.com.br/v1/viewer/list/bydate

Parâmetros

CampoTipoDescrição
dataInicialstringData/hora inicial do período, no formato YYYYMMDDTHHmm (ex: 20260514T0900) Local: query. Obrigatório.
dataFinalstringData/hora final do período, no formato YYYYMMDDTHHmm (ex: 20260514T1000) Local: query. Obrigatório.
forMedicboolean(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.
pageinteger(Opcional) Página da listagem. Padrão: 1. Local: query. Opcional.
pageSizeinteger(Opcional) Quantidade de exames por página. Padrão: 20. Máximo: 20. Local: query. Opcional.
apistringOpcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob".

Respostas de sucesso

200 · OK

CampoTipoDescrição
examsarray<object>Obrigatório. Itens: object.
exams[].accessionNumberstring | nullObrigatório. Aceita null.
exams[].patientobjectObrigatório.
exams[].patient.codigo_pacientestring | nullObrigatório. Aceita null.
exams[].patient.namestringObrigatório.
exams[].descriptionstring | nullObrigatório. Aceita null.
exams[].studyDatestring | nullObrigatório. Aceita null.
exams[].urlstringObrigatório.
paginationobjectObrigatório.
pagination.totalExamsintegerObrigatório.
pagination.totalPagesintegerObrigatório.
pagination.currentPageintegerObrigatório.
pagination.currentPageTotalintegerObrigató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.

CampoTipoDescrição
messagestring | array<string>Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório.
errorstringSó nos erros de validação ("Bad Request") Opcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

POST
https://integracao.themishealth.com.br/v1/worklist

Parâmetros

CampoTipoDescrição
apistringOpcional; quando presente, aceita one ou mob. Local: header. Opcional. Valores: "one", "mob".
adapterstringNome salvo nesta credencial, ou preset mobilemed/kai. Local: header. Opcional.
patient_idstring | integerCódigo do paciente no sistema de origem Opcional.
patient_namestringNome do paciente (obrigatório) Opcional.
patient_birthdatestringyyyy-mm-dd (ou yyyymmdd) Opcional.
patient_sexstringOpcional. Valores: "M", "F", "O", "U".
patient_cpfstringSó dígitos Opcional.
accession_numberstring | integerÚnico na organização, até 16 caracteres (obrigatório) Opcional.
referring_physicianstringMédico solicitante Opcional.
modalitystringSigla DICOM (CT, MR, MG, US, CR, DX…) (obrigatório) Opcional.
study_descriptionstringOpcional.
date_examstringyyyy-mm-dd (ou yyyymmdd) (obrigatório) Opcional.
time_examstringhh:mm:ss (ou hhmmss) (obrigatório) Opcional.
insurence_planstringConvênio (sic, grafia da MobileMed) Opcional.
patient_commentsanyPreservado na fonte; não produz campo operacional. Opcional.
register_readanyPreservado 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

CampoTipoDescrição
accession_numberstringObrigatório.
statusstringObrigató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

CampoTipoDescrição
accession_numberstringObrigatório.
statusstringObrigató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.

CampoTipoDescrição
messagestring | array<string>Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório.
errorstringSó nos erros de validação ("Bad Request") Opcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

CampoTipoDescrição
errorobjectObrigatório.
error.error_codeintegerOpcional.
error.error_msgstringOpcional.
error.messagestringOpcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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.

CampoTipoDescrição
messagestring | array<string>Texto nas regras de negócio; array de mensagens nos erros de validação do corpo Obrigatório.
errorstringSó nos erros de validação ("Bad Request") Opcional.
statusCodeintegerOpcional.
timestampstringOpcional.
pathstringOpcional.
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"
}