Opinara

Documentação da API

Integração com os dados de avaliações do seu estabelecimento

URL base

https://opinara.com.br/functions/integrationApi

Autenticação

Toda requisição é feita por POST para a URL base, com o corpo em JSON contendo o campoaction. A autenticação usa a chave de API no headerX-API-Key. Cada chave acessa somente os dados do estabelecimento que a criou.

Headers obrigatórios

Content-Type: application/json
X-API-Key: opn_...

Gere sua chave em Configurações → API dentro do painel do estabelecimento. A chave é exibida uma única vez.

Chamada de exemplo
curl -X POST https://opinara.com.br/functions/integrationApi \
  -H "Content-Type: application/json" \
  -H "X-API-Key: opn_1a2b3c4d5e6f7a8b9c0d1e2f" \
  -d '{
    "action": "get_establishment"
  }'
POST
/functions/integrationApi

Dados do estabelecimento

Retorna as informações do estabelecimento vinculado à chave de API, incluindo os links públicos de avaliação (geral, setores e pessoas) e a imagem do QR Code do link geral.

action"get_establishment"
Exemplo cURL
curl -X POST https://opinara.com.br/functions/integrationApi \
  -H "Content-Type: application/json" \
  -H "X-API-Key: SUA_CHAVE" \
  -d '{
    "action": "get_establishment"
  }'
Resposta (200 OK)
{
  "ok": true,
  "establishment": {
    "id": "6ad27e7f9cff0e69825bf912",
    "name": "Estabelecimento Exemplo",
    "slug": "estabelecimento-exemplo",
    "logo_url": null,
    "evaluation_method": "nps",
    "status": "active",
    "evaluation_links": {
      "general": "https://opinara.com.br/avaliar/estabelecimento/estabelecimento-exemplo/geral",
      "sectors": "https://opinara.com.br/avaliar/estabelecimento/estabelecimento-exemplo/setores",
      "people": "https://opinara.com.br/avaliar/estabelecimento/estabelecimento-exemplo/pessoas",
      "products": "https://opinara.com.br/avaliar/estabelecimento/estabelecimento-exemplo/produtos"
    },
    "general_qr_code_url": "https://api.qrserver.com/v1/create-qr-code/?size=600x600&ecc=H&data=https%3A%2F%2Fopinara.com.br%2Favaliar%2Festabelecimento%2Festabelecimento-exemplo%2Fgeral"
  }
}

Endpoint: https://opinara.com.br/functions/integrationApi

POST
/functions/integrationApi

Funcionários ativos

Lista todos os funcionários ativos do estabelecimento, ordenados por nome, com o link público de avaliação e a imagem do QR Code de cada um.

action"list_employees"
Exemplo cURL
curl -X POST https://opinara.com.br/functions/integrationApi \
  -H "Content-Type: application/json" \
  -H "X-API-Key: SUA_CHAVE" \
  -d '{
    "action": "list_employees"
  }'
Resposta (200 OK)
{
  "ok": true,
  "employees": [
    {
      "id": "6ad27e7fa6a30989eadfa50c",
      "full_name": "Maria Souza",
      "role": "Recepção",
      "unit": "Unidade Centro",
      "slug": "maria-souza",
      "qr_code_id": "qr_8f21c",
      "evaluation_url": "https://opinara.com.br/avaliar/estabelecimento/estabelecimento-exemplo/pessoa/maria-souza",
      "qr_code_url": "https://api.qrserver.com/v1/create-qr-code/?size=600x600&ecc=H&data=https%3A%2F%2Fopinara.com.br%2Favaliar%2Festabelecimento%2Festabelecimento-exemplo%2Fpessoa%2Fmaria-souza"
    }
  ]
}

Endpoint: https://opinara.com.br/functions/integrationApi

POST
/functions/integrationApi

Salas e setores ativos

Lista todas as salas/setores ativos do estabelecimento, ordenados por nome, com o link público de avaliação e a imagem do QR Code de cada um.

action"list_rooms"
Exemplo cURL
curl -X POST https://opinara.com.br/functions/integrationApi \
  -H "Content-Type: application/json" \
  -H "X-API-Key: SUA_CHAVE" \
  -d '{
    "action": "list_rooms"
  }'
Resposta (200 OK)
{
  "ok": true,
  "rooms": [
    {
      "id": "6ad27e7fa6a30989eadfa51a",
      "name": "Recepção",
      "unit": "Unidade Centro",
      "slug": "recepcao",
      "qr_code_id": "qr_3b77a",
      "evaluation_url": "https://opinara.com.br/avaliar/estabelecimento/estabelecimento-exemplo/setor/recepcao",
      "qr_code_url": "https://api.qrserver.com/v1/create-qr-code/?size=600x600&ecc=H&data=https%3A%2F%2Fopinara.com.br%2Favaliar%2Festabelecimento%2Festabelecimento-exemplo%2Fsetor%2Frecepcao"
    }
  ]
}

Endpoint: https://opinara.com.br/functions/integrationApi

POST
/functions/integrationApi

Produtos e serviços ativos

Lista todos os produtos e serviços ativos do estabelecimento, ordenados por nome, com o link público de avaliação e a imagem do QR Code de cada um.

action"list_products"
Exemplo cURL
curl -X POST https://opinara.com.br/functions/integrationApi \
  -H "Content-Type: application/json" \
  -H "X-API-Key: SUA_CHAVE" \
  -d '{
    "action": "list_products"
  }'
Resposta (200 OK)
{
  "ok": true,
  "products": [
    {
      "id": "6ad27e81c4a10b33f0a91d77",
      "name": "Plano Dental",
      "kind": "servico",
      "unit": "Unidade Centro",
      "slug": "plano-dental",
      "qr_code_id": "qr_5d90f",
      "evaluation_url": "https://opinara.com.br/avaliar/estabelecimento/estabelecimento-exemplo/produto/plano-dental",
      "qr_code_url": "https://api.qrserver.com/v1/create-qr-code/?size=600x600&ecc=H&data=https%3A%2F%2Fopinara.com.br%2Favaliar%2Festabelecimento%2Festabelecimento-exemplo%2Fproduto%2Fplano-dental"
    }
  ]
}

Endpoint: https://opinara.com.br/functions/integrationApi

POST
/functions/integrationApi

Cadastrar funcionário

Cria um funcionário no estabelecimento da chave. O link de avaliação e o QR Code são gerados automaticamente.

action"create_employee"

Parâmetros do corpo (JSON)

CampoTipoObrigatórioDescrição
full_namestringSimNome completo.
rolestringSimCargo/função.
unitstringSimUnidade de trabalho.
slugstringNãoLink personalizado (gerado do nome quando omitido).
photo_urlstringNãoURL da foto.
statusstringNão"active" (padrão) ou "inactive".
Exemplo cURL
curl -X POST https://opinara.com.br/functions/integrationApi \
  -H "Content-Type: application/json" \
  -H "X-API-Key: SUA_CHAVE" \
  -d '{
    "action": "create_employee",
    "full_name": "Maria Souza",
    "role": "Recepção",
    "unit": "Unidade Centro"
  }'
Resposta (200 OK)
{
  "ok": true,
  "employee": {
    "id": "6ad27e7fa6a30989eadfa50c",
    "full_name": "Maria Souza",
    "role": "Recepção",
    "unit": "Unidade Centro",
    "slug": "maria-souza",
    "status": "active",
    "evaluation_url": "https://opinara.com.br/avaliar/estabelecimento/estabelecimento-exemplo/pessoa/maria-souza"
  }
}

Endpoint: https://opinara.com.br/functions/integrationApi

POST
/functions/integrationApi

Editar funcionário

Atualiza os dados de um funcionário do estabelecimento da chave.

action"update_employee"

Parâmetros do corpo (JSON)

CampoTipoObrigatórioDescrição
idstringSimID do funcionário.
full_namestringNãoNome completo.
rolestringNãoCargo/função.
unitstringNãoUnidade de trabalho.
slugstringNãoLink personalizado de avaliação.
photo_urlstringNãoURL da foto.
statusstringNão"active" ou "inactive".
Exemplo cURL
curl -X POST https://opinara.com.br/functions/integrationApi \
  -H "Content-Type: application/json" \
  -H "X-API-Key: SUA_CHAVE" \
  -d '{
    "action": "update_employee",
    "id": "6ad27e7fa6a30989eadfa50c",
    "role": "Coordenação",
    "status": "inactive"
  }'
Resposta (200 OK)
{
  "ok": true,
  "employee": {
    "id": "6ad27e7fa6a30989eadfa50c",
    "full_name": "Maria Souza",
    "role": "Coordenação",
    "status": "inactive",
    "evaluation_url": "https://opinara.com.br/avaliar/estabelecimento/estabelecimento-exemplo/pessoa/maria-souza"
  }
}

Endpoint: https://opinara.com.br/functions/integrationApi

POST
/functions/integrationApi

Cadastrar sala/setor

Cria uma sala ou setor no estabelecimento da chave. O link de avaliação e o QR Code são gerados automaticamente.

action"create_room"

Parâmetros do corpo (JSON)

CampoTipoObrigatórioDescrição
namestringSimNome da sala/setor.
unitstringSimUnidade.
slugstringNãoLink personalizado (gerado do nome quando omitido).
photo_urlstringNãoURL da foto.
statusstringNão"active" (padrão) ou "inactive".
Exemplo cURL
curl -X POST https://opinara.com.br/functions/integrationApi \
  -H "Content-Type: application/json" \
  -H "X-API-Key: SUA_CHAVE" \
  -d '{
    "action": "create_room",
    "name": "Recepção",
    "unit": "Unidade Centro"
  }'
Resposta (200 OK)
{
  "ok": true,
  "room": {
    "id": "6ad27e7fa6a30989eadfa51a",
    "name": "Recepção",
    "unit": "Unidade Centro",
    "slug": "recepcao",
    "status": "active",
    "evaluation_url": "https://opinara.com.br/avaliar/estabelecimento/estabelecimento-exemplo/setor/recepcao"
  }
}

Endpoint: https://opinara.com.br/functions/integrationApi

POST
/functions/integrationApi

Editar sala/setor

Atualiza os dados de uma sala ou setor do estabelecimento da chave.

action"update_room"

Parâmetros do corpo (JSON)

CampoTipoObrigatórioDescrição
idstringSimID da sala/setor.
namestringNãoNome da sala/setor.
unitstringNãoUnidade.
slugstringNãoLink personalizado de avaliação.
photo_urlstringNãoURL da foto.
statusstringNão"active" ou "inactive".
Exemplo cURL
curl -X POST https://opinara.com.br/functions/integrationApi \
  -H "Content-Type: application/json" \
  -H "X-API-Key: SUA_CHAVE" \
  -d '{
    "action": "update_room",
    "id": "6ad27e7fa6a30989eadfa51a",
    "name": "Recepção Principal"
  }'
Resposta (200 OK)
{
  "ok": true,
  "room": {
    "id": "6ad27e7fa6a30989eadfa51a",
    "name": "Recepção Principal",
    "unit": "Unidade Centro",
    "slug": "recepcao",
    "evaluation_url": "https://opinara.com.br/avaliar/estabelecimento/estabelecimento-exemplo/setor/recepcao"
  }
}

Endpoint: https://opinara.com.br/functions/integrationApi

POST
/functions/integrationApi

Cadastrar produto/serviço

Cria um produto ou serviço no estabelecimento da chave. O link de avaliação e o QR Code são gerados automaticamente.

action"create_product"

Parâmetros do corpo (JSON)

CampoTipoObrigatórioDescrição
namestringSimNome do produto ou serviço.
unitstringSimUnidade onde é oferecido.
kindstringNão"produto" (padrão) ou "servico".
slugstringNãoLink personalizado (gerado do nome quando omitido).
photo_urlstringNãoURL da foto.
statusstringNão"active" (padrão) ou "inactive".
Exemplo cURL
curl -X POST https://opinara.com.br/functions/integrationApi \
  -H "Content-Type: application/json" \
  -H "X-API-Key: SUA_CHAVE" \
  -d '{
    "action": "create_product",
    "name": "Plano Dental",
    "kind": "servico",
    "unit": "Unidade Centro"
  }'
Resposta (200 OK)
{
  "ok": true,
  "product": {
    "id": "6ad27e81c4a10b33f0a91d77",
    "name": "Plano Dental",
    "kind": "servico",
    "unit": "Unidade Centro",
    "slug": "plano-dental",
    "status": "active",
    "evaluation_url": "https://opinara.com.br/avaliar/estabelecimento/estabelecimento-exemplo/produto/plano-dental"
  }
}

Endpoint: https://opinara.com.br/functions/integrationApi

POST
/functions/integrationApi

Editar produto/serviço

Atualiza os dados de um produto ou serviço do estabelecimento da chave.

action"update_product"

Parâmetros do corpo (JSON)

CampoTipoObrigatórioDescrição
idstringSimID do produto/serviço.
namestringNãoNome do produto ou serviço.
kindstringNão"produto" ou "servico".
unitstringNãoUnidade onde é oferecido.
slugstringNãoLink personalizado de avaliação.
photo_urlstringNãoURL da foto.
statusstringNão"active" ou "inactive".
Exemplo cURL
curl -X POST https://opinara.com.br/functions/integrationApi \
  -H "Content-Type: application/json" \
  -H "X-API-Key: SUA_CHAVE" \
  -d '{
    "action": "update_product",
    "id": "6ad27e81c4a10b33f0a91d77",
    "name": "Plano Dental Premium",
    "status": "inactive"
  }'
Resposta (200 OK)
{
  "ok": true,
  "product": {
    "id": "6ad27e81c4a10b33f0a91d77",
    "name": "Plano Dental Premium",
    "kind": "servico",
    "status": "inactive",
    "evaluation_url": "https://opinara.com.br/avaliar/estabelecimento/estabelecimento-exemplo/produto/plano-dental"
  }
}

Endpoint: https://opinara.com.br/functions/integrationApi

POST
/functions/integrationApi

Avaliações recebidas

Lista as avaliações do estabelecimento (funcionários, salas/setores e produtos/serviços), das mais recentes para as mais antigas. Use os filtros para recortes por período ou tipo de avaliado.

action"list_evaluations"

Parâmetros do corpo (JSON)

CampoTipoObrigatórioDescrição
sincestring (ISO)NãoData/hora mínima de criação, ex: "2026-01-01T00:00:00.000Z".
limitnumberNãoQuantidade de registros (1 a 500). Padrão: 50.
target_typestringNão"employee", "room" ou "product".
Exemplo cURL
curl -X POST https://opinara.com.br/functions/integrationApi \
  -H "Content-Type: application/json" \
  -H "X-API-Key: SUA_CHAVE" \
  -d '{
    "action": "list_evaluations",
    "since": "2026-01-01T00:00:00.000Z",
    "limit": 100,
    "target_type": "employee"
  }'
Resposta (200 OK)
{
  "ok": true,
  "evaluations": [
    {
      "id": "6ad27e80ea8d1f8cb50fb864",
      "target_type": "employee",
      "target_name": "Maria Souza",
      "target_unit": "Unidade Centro",
      "rating": "excellent",
      "rating_value": 5,
      "comment": "Atendimento excelente!",
      "visitor_type": "patient",
      "is_anonymous": true,
      "created_date": "2026-02-14T13:22:05.000Z"
    }
  ],
  "has_more": false
}

Endpoint: https://opinara.com.br/functions/integrationApi

POST
/functions/integrationApi

Registrar uma avaliação

Cria uma nova avaliação para um funcionário, sala/setor ou produto/serviço do estabelecimento. Responde com 201 quando a avaliação é registrada.

action"create_evaluation"

Parâmetros do corpo (JSON)

CampoTipoObrigatórioDescrição
target_typestringSim"employee", "room" ou "product".
target_idstringSimID do funcionário ou sala (obtido em list_employees / list_rooms).
rating_valuenumberSimNota de 1 a 5 (5 = excelente, 1 = péssimo).
commentstringNãoComentário do avaliador.
is_anonymousbooleanNãoPadrão: true. Se false, os dados de quem avaliou são gravados.
visitor_namestringNãoNome do avaliador (apenas quando is_anonymous = false).
visitor_phonestringNãoTelefone do avaliador (apenas quando is_anonymous = false).
visitor_typestringNão"patient" (cliente) ou "companion" (acompanhante).
Exemplo cURL
curl -X POST https://opinara.com.br/functions/integrationApi \
  -H "Content-Type: application/json" \
  -H "X-API-Key: SUA_CHAVE" \
  -d '{
    "action": "create_evaluation",
    "target_type": "employee",
    "target_id": "6ad27e7fa6a30989eadfa50c",
    "rating_value": 5,
    "comment": "Atendimento excelente!",
    "visitor_type": "patient"
  }'
Resposta (200 OK)
{
  "ok": true,
  "evaluation_id": "6ad27e80ea8d1f8cb50fb864"
}

Endpoint: https://opinara.com.br/functions/integrationApi

POST
/functions/integrationApi

Estatísticas do período

Retorna o total de avaliações, a média geral e o desempenho por avaliado no período informado.

action"get_stats"

Parâmetros do corpo (JSON)

CampoTipoObrigatórioDescrição
daysnumberNãoPeríodo em dias (1 a 730). Padrão: 30.
target_typestringNãoFiltra a busca de nomes por "employee", "room" ou "product".
Exemplo cURL
curl -X POST https://opinara.com.br/functions/integrationApi \
  -H "Content-Type: application/json" \
  -H "X-API-Key: SUA_CHAVE" \
  -d '{
    "action": "get_stats",
    "days": 30
  }'
Resposta (200 OK)
{
  "ok": true,
  "period_days": 30,
  "total_evaluations": 128,
  "average_rating": 4.62,
  "by_target": [
    {
      "target_id": "6ad27e7fa6a30989eadfa50c",
      "target_name": "Maria Souza",
      "target_unit": "Unidade Centro",
      "count": 42,
      "average": 4.81
    }
  ]
}

Endpoint: https://opinara.com.br/functions/integrationApi

Códigos de erro

Erros retornam { "ok": false, "error": "mensagem" }.

StatusDescrição
400Requisição inválida — ação inexistente ou parâmetros incorretos.
401Chave de API ausente, inválida ou revogada.
403Assinatura inativa — a API só responde enquanto o plano do estabelecimento estiver ativo.
404Avaliado não encontrado neste estabelecimento.
500Erro interno ao processar a requisição.
Exemplo de erro (401)
{
  "ok": false,
  "error": "Chave de API inválida ou revogada"
}