Pular para o conteúdo
ampli prescreve
Guia de integração V1 Em produção

Prescrição embarcada por iframe

Integração atual, usada em produção pelos parceiros. O parceiro cria o atendimento e carrega a URL devolvida dentro de um iframe.

https://devapiprescriptions.amplimed.cloud contrato v1 ambiente de desenvolvimento
Baixar .md

O manual inteiro — narrativa, contrato e exemplos — em um arquivo Markdown, para colar no assistente de IA que você usa e pedir o código na sua linguagem.

Como este contrato é mantido

O contrato da V1 não está mais disponível para novas integrações.
1

Autentique o parceiro #

POST https://devapiprescriptions.amplimed.cloud /partners/authenticate

Troque clientId e clientSecret por um token de acesso.

A integração começa trocando as credenciais do parceiro por um token de acesso, usado como Bearer token na criação do atendimento. O token tem validade curta, informada em expires_at.

Esta chamada é server-to-server

O clientSecret nunca pode sair do backend do parceiro. Não o coloque em JavaScript, em aplicativo mobile nem no repositório — quem tem o segredo consegue abrir atendimentos em nome do seu serviço. Guarde-o em variável de ambiente ou em um gerenciador de segredos.

Os nomes dos campos mudaram na V2

Se você já conhece a V2, atenção: aqui o segredo é clientSecret (e não secretKey), e a resposta traz access_token, token_type e expires_at em snake_case — não token / tokenType. As duas versões não são intercambiáveis.

Cache do token

O expires_at vem no formato Y-m-d H:i:s. Guarde o token em cache até esse momento em vez de autenticar a cada atendimento — é o que a integração de referência deste projeto faz. Sempre respeite o expires_at devolvido em vez de assumir um prazo fixo.

Quando a autenticação falha

Credencial recusada não se resolve repetindo a chamada — não coloque retry em loop aqui. Confira o ambiente para o qual você está apontando e se as credenciais são daquele ambiente. Retry com backoff faz sentido para falha de rede e erro 5xx, não para credencial inválida.

Corpo da requisição

Campo Tipo Detalhes
clientId string
obrigatório

Identificador do parceiro, fornecido pela Amplimed.

clientSecret string
obrigatório

Segredo do parceiro. Na V1 o campo chama-se clientSecret; na V2 passou a ser secretKey.

Resposta 200

Token de acesso do parceiro.

Campo Tipo Detalhes
access_token string
obrigatório

Token de acesso do parceiro.

token_type string
obrigatório

Tipo do token, usado para montar o header Authorization.

expires_at string
obrigatório

Momento de expiração do token, no formato Y-m-d H:i:s.

curl -X POST 'https://devapiprescriptions.amplimed.cloud/partners/authenticate' \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{"clientId":"SEU_CLIENT_ID","clientSecret":"SEU_CLIENT_SECRET"}'
Resposta 200
{
    "access_token": "eyJhbGciOiJIUzI1NiJ9.TOKEN_DE_ACESSO.ASSINATURA",
    "token_type": "Bearer",
    "expires_at": "2026-01-01 00:15:00"
}
Próximo passo: Crie o atendimento
2

Crie o atendimento #

POST https://devapiprescriptions.amplimed.cloud /partners/attendance

Envie profissional e paciente e receba a URL da prescrição.

Com o token de acesso em mãos, você cria o atendimento. A resposta traz a url da prescrição — é ela que o parceiro carrega no src do iframe. Um atendimento por consulta: não reaproveite a mesma URL para outro paciente.

Header de autorização

Monte o header com o token_type e o access_token da etapa anterior, resultando em Authorization: Bearer <access_token>. Envie o tipo uma única vez — repetir o prefixo (Bearer Bearer ...) é um erro comum quando se concatena token_type com um helper que já adiciona o prefixo sozinho.

embedded_type define como a prescrição aparece

coupled renderiza a prescrição dentro do fluxo da sua página, num iframe fixo. suspended abre em uma camada flutuante sobre a página, ocupando a tela até ser fechada. A escolha é sua e pode variar por tela — as duas estão demonstradas em Demonstrações.

Campos do paciente

Na V1 os campos do paciente são em português e planos (nome, documento, celular…). O celular vai somente com dígitos, incluindo código do país e DDD, e a data_nascimento no formato Y-m-d. Na V2 esses dados foram reorganizados em objetos aninhados e em inglês.

LGPD: dado de paciente trafega aqui

Este payload carrega nome, documento, data de nascimento e contato do paciente. Não registre o corpo cru desta requisição em log, APM ou ferramenta de erro. Se precisar de rastreio, registre apenas identificadores e o status da resposta. A url devolvida dá acesso ao atendimento: trate-a como credencial e não a exponha fora da sessão do profissional.

Requer o token de parceiro

Envie o token da etapa 1 no header Authorization: Bearer <token>.

Corpo da requisição

Campo Tipo Detalhes
id_profissional string
obrigatório

Identificador do profissional na Amplimed.

embedded_type string
obrigatório coupled suspended

Modo de incorporação: coupled renderiza o iframe no fluxo da página; suspended abre em camada flutuante.

paciente object
obrigatório

Dados do paciente do atendimento. A integração de referência envia todos os campos abaixo; a obrigatoriedade individual de cada um não está formalizada no contrato da V1.

paciente.nome string
opcional
paciente.documento string
opcional
paciente.tipo_documento string
opcional

Tipo do documento enviado, por exemplo CPF.

paciente.data_nascimento string
opcional

Data de nascimento no formato Y-m-d.

paciente.sexo_biologico string
opcional
paciente.celular string
opcional

Telefone celular com código do país e DDD, somente dígitos.

paciente.cidade string
opcional
paciente.estado string
opcional

Sigla da unidade federativa.

paciente.email string email
opcional

Resposta 200

Atendimento criado.

Campo Tipo Detalhes
url string
obrigatório

URL da prescrição embarcada, carregada pelo parceiro no src do iframe.

curl -X POST 'https://devapiprescriptions.amplimed.cloud/partners/attendance' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer SEU_TOKEN_DE_PARCEIRO' \
  -H 'Content-Type: application/json' \
  -d '{"id_profissional":"20332bce8072e0fa50e094939b337012","embedded_type":"suspended","paciente":{"nome":"Maria Oliveira","documento":"98765432100","tipo_documento":"CPF","data_nascimento":"1990-05-15","sexo_biologico":"Feminino","celular":"5549999999999","cidade":"Chapecó","estado":"SC","email":"maria@exemplo.com"}}'
Resposta 200
{
    "url": "https://prescricao.amplimed.com.br/atendimento/ATENDIMENTO_ID?token=..."
}
Próximo passo: Incorpore a prescrição
3

Incorpore a prescrição #

front-end

Carregue a URL no iframe e escute os eventos da prescrição.

A prescrição V1 roda dentro de um iframe: você carrega a url devolvida pela etapa anterior e escuta os eventos que a prescrição emite por window.postMessage.

O iframe precisa de acesso a storage

Inclua allow="storage-access" no iframe. Sem isso, navegadores que bloqueiam cookies de terceiros impedem a prescrição de manter a sessão do profissional.

Eventos emitidos

Cada mensagem chega como um objeto com type e data. Ignore mensagens cujo type você não conhece: a janela recebe mensagens de outras origens também.

Evento Quando acontece
attendance.close O profissional fechou o atendimento. No modo suspenso, é o gancho para fechar a camada flutuante.
prescription.generate Uma prescrição foi gerada.
attest.generate Um atestado foi gerado.
examRequest.list Uma solicitação de exames foi emitida.

Valide a origem das mensagens

Em produção, confira event.origin antes de agir sobre a mensagem, aceitando apenas a origem da prescrição Amplimed. Sem essa checagem, qualquer página aberta em outra aba poderia disparar o seu tratamento de eventos.
<!-- A url vem do seu backend, de POST /partners/attendance. -->
<iframe
  id="iframe-prescription"
  src=""
  allow="storage-access"
  style="width: 100%; min-height: 65vh; border: 0"
></iframe>

Próximos passos