Referência da API Prescri (20 operações)
A especificação completa da API em uma página navegável: cada endpoint com autenticação, parâmetros, corpo da requisição, respostas e um exemplo de cURL pronto para copiar. O arquivo openapi.json está disponível para download, importação no Postman ou geração de clientes.
Assinaturas de documentos
/api-signatures-createCriar assinatura
Envia o PDF (base64 ou URL) e inicia a assinatura ICP-Brasil. Serve para receitas, notificações SNCR (azul/amarela, com sncr_reservation_token) e qualquer outro PDF (laudo, termo de consentimento, contrato). Com session_id ativo, o documento volta já assinado.
X-API-Key e X-API-SecretCorpo da requisição
| Campo | Tipo | Descrição |
|---|---|---|
| provider* | "birdid" | "vidaas" | — |
| doctor_cpf* | string | 11 dígitos |
| doctor_full_name | string | — |
| doctor_crm | string | — |
| doctor_crm_uf | string | — |
| doctor_specialty | string | — |
| doctor_email | string · email | — |
| doctor_phone | string | — |
| pdf_base64 | string | Use pdf_base64 OU pdf_url, nunca ambos |
| pdf_url | string · uri | — |
| document_type | string | — |
| prescription_type_id | string · uuid | — |
| external_id | string | — |
| external_metadata | object | — |
| webhook_url | string · uri | — |
| redirect_url | string · uri | — |
| session_id | string · uuid | — |
| patient | object | — |
| patient.full_name* | string | — |
| patient.cpf* | string | 11 dígitos |
| patient.phone | string | — |
| stamp_options | object | — |
| stamp_options.position | "top-left" | "top-right" | "bottom-left" | "bottom-right" | — |
| stamp_options.marginX | number | — |
| stamp_options.marginY | number | — |
| stamp_options.qrSize | number | — |
| sncr_reservation_token | string | Token de pré-reserva obtido em POST /api-sncr-reserve (opcional). Usa o número já reservado em vez de consumir um novo. |
| sncr_stamp | object | Opcional. Quando presente, a Prescri desenha o quadro "NUMERAÇÃO SNCR" no PDF enviado, antes da assinatura. Sem este objeto o PDF segue inalterado (comportamento legado). |
| sncr_stamp.position | "top-left" | "top-right" | "top-center" | "bottom-left" | "bottom-right" | "bottom-center" | "custom" | — |
| sncr_stamp.x | number | Somente com position=custom. Pontos a partir da borda esquerda. |
| sncr_stamp.y | number | Somente com position=custom. Pontos a partir do topo. |
| sncr_stamp.marginX | number | — |
| sncr_stamp.marginY | number | — |
| sncr_stamp.page | — | first (padrão), last, all ou o número da página. |
| sncr_stamp.width | number | — |
| sncr_stamp.uf | string | UF impressa no quadro. Padrão: doctor_crm_uf. |
| document | object | Opcional. Gera o PDF no modelo Prescri (logo, paciente, texto e/ou itens) em vez de enviar pdf_base64/pdf_url. Exige title e body ou items. |
| document.title* | string | — |
| document.body | string | — |
| document.items | object[] | — |
| document.observations | string | — |
| document.cid10 | string | — |
| document.city | string | — |
| document.uf | string | — |
| document.branding | object | — |
| branding.logo_url | string | — |
| branding.logo_base64 | string | — |
| branding.logo_position | "left" | "right" | — |
| branding.clinic_name | string | — |
| branding.clinic_cnes | string | CNES do estabelecimento (rodapé). Se omitido, usa o CNES cadastrado na empresa. |
| branding.clinic_cnpj | string | CNPJ (só dígitos ou formatado; rodapé). Se omitido, usa o CNPJ cadastrado na empresa. Médico autônomo pode omitir. |
| branding.clinic_phone | string | Telefone de contato (rodapé). |
| branding.clinic_address | string | — |
| document.patient | object | — |
| patient.name | string | — |
| patient.cpf | string | — |
| patient.birth_date | string | — |
| patient.gender | string | — |
| patient.address | string | — |
{
"provider": "birdid",
"doctor_cpf": "12345678901",
"doctor_full_name": "Dra. Ana Souza",
"doctor_crm": "123456",
"doctor_crm_uf": "SP",
"pdf_url": "https://seusistema.com/receita.pdf",
"document_type": "Receituário Médico",
"webhook_url": "https://seusistema.com/webhooks/prescri",
"patient": {
"full_name": "João da Silva",
"cpf": "98765432100",
"phone": "5511999998888"
}
}Respostas
| 201 | Assinatura criada |
| 400 | Requisição inválida |
| 401 | Credenciais inválidas |
| 402 | Pagamento necessário. code=doctor_subscription_required (modelo médico paga: o CPF não tem assinatura ativa — consulte GET /api-billing-checkout e abra o checkout_url) ou partner_subscription_required/trial expirado (modelo parceiro paga). |
| 409 | sncr_no_numbers — o médico não tem numeração SNCR disponível para o tipo. |
| Campo | Tipo | Descrição |
|---|---|---|
| signature_id | string · uuid | — |
| status | "pending_authorization" | "authorized" | "signed" | "failed" | "cancelled" | — |
| provider | string | — |
| sign_url | string | — |
| pdf_url | string | — |
| signature_token | string | — |
| signed_at | string,null · date-time | — |
| expires_at | string,null · date-time | — |
| external_id | stringnull | — |
| metadata | objectnull | — |
| error | stringnull | — |
| created_at | string · date-time | — |
| updated_at | string · date-time | — |
| sncr_number | stringnull | Numeração SNCR (Anvisa) usada no documento controlado |
| sncr_type | stringnull | — |
| sncr_stamped | boolean | true quando o quadro de numeração SNCR foi estampado no PDF pela Prescri. |
curl -X POST "https://suykokupoevtdfalrzue.supabase.co/functions/v1/api-signatures-create" \
-H "X-API-Key: $PRESCRI_KEY" \
-H "X-API-Secret: $PRESCRI_SECRET" \
-H "Content-Type: application/json" \
-d '{
"provider": "birdid",
"doctor_cpf": "12345678901",
"doctor_full_name": "Dra. Ana Souza",
"doctor_crm": "123456",
"doctor_crm_uf": "SP",
"pdf_url": "https://seusistema.com/receita.pdf",
"document_type": "Receituário Médico",
"webhook_url": "https://seusistema.com/webhooks/prescri",
"patient": {
"full_name": "João da Silva",
"cpf": "98765432100",
"phone": "5511999998888"
}
}'/api-signatures-getConsultar assinatura
X-API-Key e X-API-SecretParâmetros
| Campo | Tipo | Descrição |
|---|---|---|
| id* | string · uuid (query) | — |
Respostas
| 200 | Status da assinatura |
| 404 | Não encontrada |
| Campo | Tipo | Descrição |
|---|---|---|
| signature_id | string · uuid | — |
| status | "pending_authorization" | "authorized" | "signed" | "failed" | "cancelled" | — |
| provider | string | — |
| sign_url | string | — |
| pdf_url | string | — |
| signature_token | string | — |
| signed_at | string,null · date-time | — |
| expires_at | string,null · date-time | — |
| external_id | stringnull | — |
| metadata | objectnull | — |
| error | stringnull | — |
| created_at | string · date-time | — |
| updated_at | string · date-time | — |
| sncr_number | stringnull | Numeração SNCR (Anvisa) usada no documento controlado |
| sncr_type | stringnull | — |
| sncr_stamped | boolean | true quando o quadro de numeração SNCR foi estampado no PDF pela Prescri. |
curl "https://suykokupoevtdfalrzue.supabase.co/functions/v1/api-signatures-get?id=00000000-0000-0000-0000-000000000000" \
-H "X-API-Key: $PRESCRI_KEY" \
-H "X-API-Secret: $PRESCRI_SECRET"/api-signatures-pdfBaixar PDF assinado
X-API-Key e X-API-SecretParâmetros
| Campo | Tipo | Descrição |
|---|---|---|
| id* | string · uuid (query) | — |
Respostas
| 200 | PDF assinado |
| 409 | Documento ainda não assinado |
curl "https://suykokupoevtdfalrzue.supabase.co/functions/v1/api-signatures-pdf?id=00000000-0000-0000-0000-000000000000" \
-H "X-API-Key: $PRESCRI_KEY" \
-H "X-API-Secret: $PRESCRI_SECRET"/api-signatures-cancelCancelar assinatura
X-API-Key e X-API-SecretParâmetros
| Campo | Tipo | Descrição |
|---|---|---|
| id* | string · uuid (query) | — |
Respostas
| 200 | Cancelada |
| 409 | Já assinado |
| Campo | Tipo | Descrição |
|---|---|---|
| ok | boolean | — |
| status | string | — |
curl -X POST "https://suykokupoevtdfalrzue.supabase.co/functions/v1/api-signatures-cancel?id=00000000-0000-0000-0000-000000000000" \
-H "X-API-Key: $PRESCRI_KEY" \
-H "X-API-Secret: $PRESCRI_SECRET"Sessões de assinatura
/api-signatures-sessions-createCriar sessão de assinatura
X-API-Key e X-API-SecretCorpo da requisição
| Campo | Tipo | Descrição |
|---|---|---|
| provider* | "birdid" | "vidaas" | — |
| doctor_cpf* | string | — |
| session_lifetime_seconds | integer | Máx. 604800 (7 dias) no Bird ID e 43200 (12h) no VIDaaS |
| redirect_url | string · uri | — |
{
"provider": "birdid",
"doctor_cpf": "12345678901",
"session_lifetime_seconds": 604800,
"redirect_url": "https://seusistema.com/sessao-autorizada"
}Respostas
| 201 | Sessão criada |
| Campo | Tipo | Descrição |
|---|---|---|
| session_id | string · uuid | — |
| status | "pending_authorization" | "active" | "expired" | "revoked" | — |
| provider | string | — |
| doctor_cpf | string | — |
| doctor_id | string | — |
| authorize_url | string | — |
| authorized_at | string,null · date-time | — |
| expires_at | string · date-time | — |
| signatures_count | integer | — |
| last_used_at | string,null · date-time | — |
| session_lifetime_seconds | integer | — |
| created_at | string · date-time | — |
curl -X POST "https://suykokupoevtdfalrzue.supabase.co/functions/v1/api-signatures-sessions-create" \
-H "X-API-Key: $PRESCRI_KEY" \
-H "X-API-Secret: $PRESCRI_SECRET" \
-H "Content-Type: application/json" \
-d '{
"provider": "birdid",
"doctor_cpf": "12345678901",
"session_lifetime_seconds": 604800,
"redirect_url": "https://seusistema.com/sessao-autorizada"
}'/api-signatures-sessions-getConsultar sessão
X-API-Key e X-API-SecretParâmetros
| Campo | Tipo | Descrição |
|---|---|---|
| session_id* | string · uuid (query) | — |
Respostas
| 200 | Status da sessão |
| Campo | Tipo | Descrição |
|---|---|---|
| session_id | string · uuid | — |
| status | "pending_authorization" | "active" | "expired" | "revoked" | — |
| provider | string | — |
| doctor_cpf | string | — |
| doctor_id | string | — |
| authorize_url | string | — |
| authorized_at | string,null · date-time | — |
| expires_at | string · date-time | — |
| signatures_count | integer | — |
| last_used_at | string,null · date-time | — |
| session_lifetime_seconds | integer | — |
| created_at | string · date-time | — |
curl "https://suykokupoevtdfalrzue.supabase.co/functions/v1/api-signatures-sessions-get?session_id=00000000-0000-0000-0000-000000000000" \
-H "X-API-Key: $PRESCRI_KEY" \
-H "X-API-Secret: $PRESCRI_SECRET"Catálogo
/api-document-typesListar tipos de documento
X-API-Key e X-API-SecretRespostas
| 200 | Tipos aceitos em document_type / prescription_type_id |
| Campo | Tipo | Descrição |
|---|---|---|
| document_types | object[] | — |
curl "https://suykokupoevtdfalrzue.supabase.co/functions/v1/api-document-types" \
-H "X-API-Key: $PRESCRI_KEY" \
-H "X-API-Secret: $PRESCRI_SECRET"SNCR — receitas controladas
/api-sncr-balanceSaldo de numeração SNCR do médico
Exige vínculo ativo com o parceiro. Saldo da carteira disponível, não a cota restante na VISA; soma filas institucionais habilitadas e pessoais.
X-API-Key e X-API-SecretParâmetros
| Campo | Tipo | Descrição |
|---|---|---|
| doctor_cpf* | string (query) | — |
Respostas
| 200 | Saldo por tipo (sncr_type, available, required, can_issue) |
curl "https://suykokupoevtdfalrzue.supabase.co/functions/v1/api-sncr-balance?doctor_cpf=12345678901" \
-H "X-API-Key: $PRESCRI_KEY" \
-H "X-API-Secret: $PRESCRI_SECRET"/api-sncr-reservePré-reservar numeração SNCR
Exige vínculo ativo. Reserva atômica por 30 minutos (5 a 120), consumida apenas após assinatura. Ordem: institucional habilitada, carteira vinculada ao parceiro, carteira app.
X-API-Key e X-API-SecretCorpo da requisição
| Campo | Tipo | Descrição |
|---|---|---|
| doctor_cpf* | string | 11 dígitos |
| sncr_type* | "NRA" | "NRB" | "NRB2" | "NRR" | "NRT" | "RCE" | "RET" | — |
| ttl_minutes | integer | — |
{
"doctor_cpf": "12345678901",
"sncr_type": "NRB",
"ttl_minutes": 30
}Respostas
| 201 | Número reservado |
| 400 | Requisição inválida |
| 401 | Credenciais inválidas |
| 409 | Carteira do médico sem numeração (sncr_no_numbers) |
| Campo | Tipo | Descrição |
|---|---|---|
| sncr_number | string | — |
| sncr_type | string | — |
| reservation_token | string | — |
| expires_at | string · date-time | — |
curl -X POST "https://suykokupoevtdfalrzue.supabase.co/functions/v1/api-sncr-reserve" \
-H "X-API-Key: $PRESCRI_KEY" \
-H "X-API-Secret: $PRESCRI_SECRET" \
-H "Content-Type: application/json" \
-d '{
"doctor_cpf": "12345678901",
"sncr_type": "NRB",
"ttl_minutes": 30
}'/api-sncr-reserveLiberar pré-reserva
Devolve o número reservado para a carteira do médico.
X-API-Key e X-API-SecretParâmetros
| Campo | Tipo | Descrição |
|---|---|---|
| reservation_token* | string (query) | — |
Respostas
| 200 | Reserva liberada |
| 401 | Credenciais inválidas |
| 404 | Reserva não encontrada ou já utilizada |
curl -X DELETE "https://suykokupoevtdfalrzue.supabase.co/functions/v1/api-sncr-reserve?reservation_token=SEU_RESERVATION_TOKEN" \
-H "X-API-Key: $PRESCRI_KEY" \
-H "X-API-Secret: $PRESCRI_SECRET"/api-sncr-connect-urlGerar link gov.br para médico ativo sem exigir conta Prescri
Link privado válido por 1 a 72 horas (padrão 24h). O médico consente e autentica pelo gov.br; o servidor verifica a assinatura JWT e CPF e requisita números à Anvisa. Apenas notificações NRA, NRB, NRB2, NRR e NRT, 10 a 50 por pedido. Sem transposição de talonário físico. O retorno OAuth precisa ocorrer no domínio .br autorizado.
X-API-Key e X-API-SecretCorpo da requisição
{
"doctor_cpf": "52998224725",
"expires_in_hours": 24
}Respostas
| 201 | Operação concluída |
| 400 | Parâmetros inválidos |
| 401 | Credenciais inválidas |
| 403 | doctor_not_enabled |
| 404 | doctor_not_found |
| 409 | doctor_limit_reached / doctor_already_linked |
| 500 | internal_error |
curl -X POST "https://suykokupoevtdfalrzue.supabase.co/functions/v1/api-sncr-connect-url" \
-H "X-API-Key: $PRESCRI_KEY" \
-H "X-API-Secret: $PRESCRI_SECRET" \
-H "Content-Type: application/json" \
-d '{
"doctor_cpf": "52998224725",
"expires_in_hours": 24
}'/api-sncr-connect-urlRevogar link de conexão
X-API-Key e X-API-SecretCorpo da requisição
{
"link_id": "00000000-0000-0000-0000-000000000000"
}Respostas
| 200 | Operação concluída |
| 400 | Parâmetros inválidos |
| 401 | Credenciais inválidas |
| 403 | doctor_not_enabled |
| 404 | doctor_not_found |
| 409 | doctor_limit_reached / doctor_already_linked |
| 500 | internal_error |
curl -X DELETE "https://suykokupoevtdfalrzue.supabase.co/functions/v1/api-sncr-connect-url" \
-H "X-API-Key: $PRESCRI_KEY" \
-H "X-API-Secret: $PRESCRI_SECRET" \
-H "Content-Type: application/json" \
-d '{
"link_id": "00000000-0000-0000-0000-000000000000"
}'/api-sncr-importImportação manual desativada
X-API-Key e X-API-SecretRespostas
| 401 | Credenciais inválidas |
| 410 | manual_numbering_disabled — use api-sncr-connect-url |
curl -X POST "https://suykokupoevtdfalrzue.supabase.co/functions/v1/api-sncr-import" \
-H "X-API-Key: $PRESCRI_KEY" \
-H "X-API-Secret: $PRESCRI_SECRET"Médicos e vagas
/api-doctorsListar médicos e vagas (page e limit)
X-API-Key e X-API-SecretRespostas
| 200 | Operação concluída |
| 400 | Parâmetros inválidos |
| 401 | Credenciais inválidas |
| 403 | doctor_not_enabled |
| 404 | doctor_not_found |
| 409 | doctor_limit_reached / doctor_already_linked |
| 500 | internal_error |
curl "https://suykokupoevtdfalrzue.supabase.co/functions/v1/api-doctors" \
-H "X-API-Key: $PRESCRI_KEY" \
-H "X-API-Secret: $PRESCRI_SECRET"/api-doctorsIncluir médico; limite de vagas transacional
X-API-Key e X-API-SecretCorpo da requisição
{
"doctor_cpf": "52998224725",
"full_name": "Médico de exemplo",
"crm": "123456",
"crm_uf": "SP",
"email": "medico@example.com"
}Respostas
| 201 | Operação concluída |
| 400 | Parâmetros inválidos |
| 401 | Credenciais inválidas |
| 403 | doctor_not_enabled |
| 404 | doctor_not_found |
| 409 | doctor_limit_reached / doctor_already_linked |
| 500 | internal_error |
curl -X POST "https://suykokupoevtdfalrzue.supabase.co/functions/v1/api-doctors" \
-H "X-API-Key: $PRESCRI_KEY" \
-H "X-API-Secret: $PRESCRI_SECRET" \
-H "Content-Type: application/json" \
-d '{
"doctor_cpf": "52998224725",
"full_name": "Médico de exemplo",
"crm": "123456",
"crm_uf": "SP",
"email": "medico@example.com"
}'/api-doctors/{id}Consultar médico vinculado
X-API-Key e X-API-SecretParâmetros
| Campo | Tipo | Descrição |
|---|---|---|
| id* | string · uuid (path) | — |
Respostas
| 200 | Operação concluída |
| 400 | Parâmetros inválidos |
| 401 | Credenciais inválidas |
| 403 | doctor_not_enabled |
| 404 | doctor_not_found |
| 409 | doctor_limit_reached / doctor_already_linked |
| 500 | internal_error |
curl "https://suykokupoevtdfalrzue.supabase.co/functions/v1/api-doctors/00000000-0000-0000-0000-000000000000" \
-H "X-API-Key: $PRESCRI_KEY" \
-H "X-API-Secret: $PRESCRI_SECRET"/api-doctors/{id}Atualizar ou reativar médico
X-API-Key e X-API-SecretParâmetros
| Campo | Tipo | Descrição |
|---|---|---|
| id* | string · uuid (path) | — |
Corpo da requisição
{
"status": "active",
"full_name": "Médico de exemplo"
}Respostas
| 200 | Operação concluída |
| 400 | Parâmetros inválidos |
| 401 | Credenciais inválidas |
| 403 | doctor_not_enabled |
| 404 | doctor_not_found |
| 409 | doctor_limit_reached / doctor_already_linked |
| 500 | internal_error |
curl -X PATCH "https://suykokupoevtdfalrzue.supabase.co/functions/v1/api-doctors/00000000-0000-0000-0000-000000000000" \
-H "X-API-Key: $PRESCRI_KEY" \
-H "X-API-Secret: $PRESCRI_SECRET" \
-H "Content-Type: application/json" \
-d '{
"status": "active",
"full_name": "Médico de exemplo"
}'/api-doctors/{id}Inativar médico, preservar histórico e revogar links SNCR
X-API-Key e X-API-SecretParâmetros
| Campo | Tipo | Descrição |
|---|---|---|
| id* | string · uuid (path) | — |
Respostas
| 200 | Operação concluída |
| 400 | Parâmetros inválidos |
| 401 | Credenciais inválidas |
| 403 | doctor_not_enabled |
| 404 | doctor_not_found |
| 409 | doctor_limit_reached / doctor_already_linked |
| 500 | internal_error |
curl -X DELETE "https://suykokupoevtdfalrzue.supabase.co/functions/v1/api-doctors/00000000-0000-0000-0000-000000000000" \
-H "X-API-Key: $PRESCRI_KEY" \
-H "X-API-Secret: $PRESCRI_SECRET"Cobrança (modelo médico paga)
/api-billing-checkoutConsultar assinatura do médico (modelo médico paga)
X-API-Key e X-API-SecretParâmetros
| Campo | Tipo | Descrição |
|---|---|---|
| doctor_cpf* | string (query) | — |
Respostas
| 200 | Status: none | pending | active | past_due |
| Campo | Tipo | Descrição |
|---|---|---|
| doctor_cpf | string | — |
| status | "none" | "pending" | "active" | "past_due" | — |
| current_period_end | string | — |
| payment_url | string | — |
| checkout_url | string | Tela da Prescri (https://www.prescri.com.br/fatura/{token}) para revisão dos dados, aceite do contrato versionado (registrado com IP, user-agent e versão antes do pagamento) e pagamento Pix/cartão. No cartão, as mensalidades seguintes são cobradas automaticamente no mesmo cartão (guardado só no intermediador de pagamentos); se recusado, a fatura vai por e-mail para pagamento via Pix. Abra em modal/aba no CRM. |
curl "https://suykokupoevtdfalrzue.supabase.co/functions/v1/api-billing-checkout?doctor_cpf=12345678901" \
-H "X-API-Key: $PRESCRI_KEY" \
-H "X-API-Secret: $PRESCRI_SECRET"/api-billing-checkoutGerar contratação mensal do médico (Pix ou cartão)
Cria (ou reaproveita) a assinatura do médico e devolve checkout_url. Fluxo recomendado: abrir checkout_url, onde o médico aceita o contrato (versão registrada em billing_contract_acceptances) antes de pagar. pix_code/payment_url são retornados para integrações headless, mas o aceite contratual só é registrado na tela checkout_url. A ativação deve ser confirmada pelo backend via GET (status=active).
X-API-Key e X-API-SecretCorpo da requisição
| Campo | Tipo | Descrição |
|---|---|---|
| doctor_cpf* | string | — |
| doctor_full_name* | string | — |
| doctor_email* | string · email | Obrigatório. E-mail do pagador, usado para envio das cobranças. |
| doctor_phone | string | — |
| doctor_address | object | Opcional. Endereço do médico ou da clínica para o cadastro do pagador na cobrança. Se ausente ou incompleto, usa o endereço do perfil do médico na Prescri ou um endereço comercial padrão. |
| doctor_address.description | string | — |
| doctor_address.zipcode* | string | — |
| doctor_address.street* | string | — |
| doctor_address.number* | string | — |
| doctor_address.complement | string | — |
| doctor_address.neighborhood* | string | — |
| doctor_address.city* | string | — |
| doctor_address.state* | string | — |
| payable_with | "pix" | "credit" | — |
{
"doctor_cpf": "string",
"doctor_full_name": "string",
"doctor_email": "medico@exemplo.com.br",
"doctor_phone": "string",
"doctor_address": {
"description": "Consultório",
"zipcode": "01310100",
"street": "Avenida Exemplo",
"number": "100",
"complement": "Sala 12",
"neighborhood": "Centro",
"city": "São Paulo",
"state": "SP"
},
"payable_with": "pix"
}Respostas
| 200 | Médico já possui assinatura ativa |
| 201 | Cobrança gerada |
| 400 | Dados inválidos ou parceiro fora do modelo médico paga |
| Campo | Tipo | Descrição |
|---|---|---|
| status | "active" | — |
| checkout_url | string | Tela da Prescri (https://www.prescri.com.br/fatura/{token}) para revisão dos dados, aceite do contrato versionado (registrado com IP, user-agent e versão antes do pagamento) e pagamento Pix/cartão. No cartão, as mensalidades seguintes são cobradas automaticamente no mesmo cartão (guardado só no intermediador de pagamentos); se recusado, a fatura vai por e-mail para pagamento via Pix. Abra em modal/aba no CRM. |
curl -X POST "https://suykokupoevtdfalrzue.supabase.co/functions/v1/api-billing-checkout" \
-H "X-API-Key: $PRESCRI_KEY" \
-H "X-API-Secret: $PRESCRI_SECRET" \
-H "Content-Type: application/json" \
-d '{
"doctor_cpf": "string",
"doctor_full_name": "string",
"doctor_email": "medico@exemplo.com.br",
"doctor_phone": "string",
"doctor_address": {
"description": "Consultório",
"zipcode": "01310100",
"street": "Avenida Exemplo",
"number": "100",
"complement": "Sala 12",
"neighborhood": "Centro",
"city": "São Paulo",
"state": "SP"
},
"payable_with": "pix"
}'Modelos de dados
Estruturas reutilizadas nos corpos de requisição e nas respostas da API.
Error
| Campo | Tipo | Descrição |
|---|---|---|
| error | string | — |
| status | string | — |
Patient
| Campo | Tipo | Descrição |
|---|---|---|
| full_name* | string | — |
| cpf* | string | 11 dígitos |
| phone | string | — |
SignatureCreateRequest
| Campo | Tipo | Descrição |
|---|---|---|
| provider* | "birdid" | "vidaas" | — |
| doctor_cpf* | string | 11 dígitos |
| doctor_full_name | string | — |
| doctor_crm | string | — |
| doctor_crm_uf | string | — |
| doctor_specialty | string | — |
| doctor_email | string · email | — |
| doctor_phone | string | — |
| pdf_base64 | string | Use pdf_base64 OU pdf_url, nunca ambos |
| pdf_url | string · uri | — |
| document_type | string | — |
| prescription_type_id | string · uuid | — |
| external_id | string | — |
| external_metadata | object | — |
| webhook_url | string · uri | — |
| redirect_url | string · uri | — |
| session_id | string · uuid | — |
| patient | object | — |
| patient.full_name* | string | — |
| patient.cpf* | string | 11 dígitos |
| patient.phone | string | — |
| stamp_options | object | — |
| stamp_options.position | "top-left" | "top-right" | "bottom-left" | "bottom-right" | — |
| stamp_options.marginX | number | — |
| stamp_options.marginY | number | — |
| stamp_options.qrSize | number | — |
| sncr_reservation_token | string | Token de pré-reserva obtido em POST /api-sncr-reserve (opcional). Usa o número já reservado em vez de consumir um novo. |
| sncr_stamp | object | Opcional. Quando presente, a Prescri desenha o quadro "NUMERAÇÃO SNCR" no PDF enviado, antes da assinatura. Sem este objeto o PDF segue inalterado (comportamento legado). |
| sncr_stamp.position | "top-left" | "top-right" | "top-center" | "bottom-left" | "bottom-right" | "bottom-center" | "custom" | — |
| sncr_stamp.x | number | Somente com position=custom. Pontos a partir da borda esquerda. |
| sncr_stamp.y | number | Somente com position=custom. Pontos a partir do topo. |
| sncr_stamp.marginX | number | — |
| sncr_stamp.marginY | number | — |
| sncr_stamp.page | — | first (padrão), last, all ou o número da página. |
| sncr_stamp.width | number | — |
| sncr_stamp.uf | string | UF impressa no quadro. Padrão: doctor_crm_uf. |
| document | object | Opcional. Gera o PDF no modelo Prescri (logo, paciente, texto e/ou itens) em vez de enviar pdf_base64/pdf_url. Exige title e body ou items. |
| document.title* | string | — |
| document.body | string | — |
| document.items | object[] | — |
| document.observations | string | — |
| document.cid10 | string | — |
| document.city | string | — |
| document.uf | string | — |
| document.branding | object | — |
| branding.logo_url | string | — |
| branding.logo_base64 | string | — |
| branding.logo_position | "left" | "right" | — |
| branding.clinic_name | string | — |
| branding.clinic_cnes | string | CNES do estabelecimento (rodapé). Se omitido, usa o CNES cadastrado na empresa. |
| branding.clinic_cnpj | string | CNPJ (só dígitos ou formatado; rodapé). Se omitido, usa o CNPJ cadastrado na empresa. Médico autônomo pode omitir. |
| branding.clinic_phone | string | Telefone de contato (rodapé). |
| branding.clinic_address | string | — |
| document.patient | object | — |
| patient.name | string | — |
| patient.cpf | string | — |
| patient.birth_date | string | — |
| patient.gender | string | — |
| patient.address | string | — |
Signature
| Campo | Tipo | Descrição |
|---|---|---|
| signature_id | string · uuid | — |
| status | "pending_authorization" | "authorized" | "signed" | "failed" | "cancelled" | — |
| provider | string | — |
| sign_url | string | — |
| pdf_url | string | — |
| signature_token | string | — |
| signed_at | string,null · date-time | — |
| expires_at | string,null · date-time | — |
| external_id | stringnull | — |
| metadata | objectnull | — |
| error | stringnull | — |
| created_at | string · date-time | — |
| updated_at | string · date-time | — |
| sncr_number | stringnull | Numeração SNCR (Anvisa) usada no documento controlado |
| sncr_type | stringnull | — |
| sncr_stamped | boolean | true quando o quadro de numeração SNCR foi estampado no PDF pela Prescri. |
Session
| Campo | Tipo | Descrição |
|---|---|---|
| session_id | string · uuid | — |
| status | "pending_authorization" | "active" | "expired" | "revoked" | — |
| provider | string | — |
| doctor_cpf | string | — |
| doctor_id | string | — |
| authorize_url | string | — |
| authorized_at | string,null · date-time | — |
| expires_at | string · date-time | — |
| signatures_count | integer | — |
| last_used_at | string,null · date-time | — |
| session_lifetime_seconds | integer | — |
| created_at | string · date-time | — |
SncrReservation
| Campo | Tipo | Descrição |
|---|---|---|
| sncr_number | string | — |
| sncr_type | string | — |
| reservation_token | string | — |
| expires_at | string · date-time | — |
Como usar esta especificação
- Postman / Insomnia: importe
/openapi.jsonpara ter as requisições prontas, ou use a coleçãoprescri.postman_collection.jsonque já traz as variáveis de chave e secret. - Gerar cliente:
openapi-generator-cli generate -i openapi.json -g typescript-axios(oupython,php,go…) cria o SDK do seu idioma. - Validar / visualizar: a URL
https://www.prescri.com.br/openapi.jsonfunciona direto em qualquer leitor OpenAPI (Swagger UI, Redoc, Scalar).