HairDora Salon Scheduling

Veja os horários livres, compromissos, estilistas, serviços, clientes, orçamentos e pagamentos do seu salão.

Servidor MCP hospedado

npx add-mcp 'https://mcp.hairdora.com/mcp'

Instala no Claude Code, Codex, Cursor e outros

Documentação

Leia e escreva os dados do seu salão a partir do seu próprio código: uma API REST com chaves de escopo e limites de taxa por chave para agendamentos, clientes, serviços e salões, além de webhooks assinados quando algo muda.

Chaves de API

Obtenha uma chave e autentique-se

A API REST do HairDora permite que seu backend trabalhe com os mesmos registros que o painel exibe: os agendamentos do seu calendário, os clientes que os reservam, os serviços que você oferece e os salões aos quais eles pertencem.

Um administrador da sua organização cria uma chave de API no painel do HairDora. O segredo é exibido apenas uma vez, quando a chave é criada, e nunca mais — guarde-o em um local seguro. Uma chave pertence a uma única organização, portanto a organização está implícita na chave e nunca precisa ser enviada; uma chave também pode ser bloqueada para um único salão.

Autentique cada solicitação com autenticação básica HTTP contendo apenas o segredo da chave, codificado em base64, no cabeçalho Authorization.

# The Authorization header is HTTP Basic auth carrying only the key secret,
# with no username and no colon.
Authorization: Basic $(printf %s YOUR_API_KEY_SECRET | base64)

Todo endpoint fica sob https://api.hairdora.com. Solicitações feitas com uma chave são limitadas por taxa por chave; exceder o limite retorna 429.

Início rápido

Suas três primeiras chamadas

Encontre seu salão, leia a semana seguinte no calendário e adicione um cliente a ele.

# List the salons the key can reach
curl https://api.hairdora.com/api/salons \
  -H "Authorization: Basic $(printf %s YOUR_API_KEY_SECRET | base64)"

# List next week's appointments for one salon.
# startTime and endTime are ISO 8601 instants.
curl -G https://api.hairdora.com/api/appointments \
  --data-urlencode "salonId=SALON_ID" \
  --data-urlencode "startTime=2026-01-06T00:00:00.000Z" \
  --data-urlencode "endTime=2026-01-13T00:00:00.000Z" \
  --data-urlencode "sortField=startTime" \
  --data-urlencode "sortDirection=ASC" \
  -H "Authorization: Basic $(printf %s YOUR_API_KEY_SECRET | base64)"

# Create a client in that salon
curl -X POST https://api.hairdora.com/api/clients \
  -H "Authorization: Basic $(printf %s YOUR_API_KEY_SECRET | base64)" \
  -H "Content-Type: application/json" \
  -d '{
    "salonId": "SALON_ID",
    "firstName": "Ada",
    "lastName": "Lovelace",
    "email": "ada@example.com"
  }'

Explore a referência completa da API — cada endpoint com seus parâmetros, corpo da solicitação, respostas e escopo necessário.

CLI

Interface de linha de comando

Os mesmos salões, clientes, serviços e agendamentos estão disponíveis no seu terminal por meio do CLI hairdora. Instale-o globalmente com npm ou execute-o ad hoc com npx.

Você nem precisa de uma conta primeiro: hairdora signup cria uma, com sua organização e primeiro salão, e faz login. Para uma conta existente, hairdora login abre seu navegador e armazena uma sessão, ou cole um segredo de chave de API com --with-key. Scripts headless e agentes podem pular o login completamente exportando HAIRDORA_API_KEY.

# Install once, globally
npm install -g hairdora
# or run it ad hoc without installing
npx hairdora --help

# Create an account from the terminal — no browser needed
hairdora signup --email owner@example.com

# Or log in to an existing account: opens your browser, stores a session
hairdora login

# The salons this account can reach
hairdora salons list

# Next week in one salon's calendar
hairdora appointments list --salonId SALON_ID \
  --startTime 2026-01-06T00:00:00.000Z \
  --endTime 2026-01-13T00:00:00.000Z --sortField startTime --sortDirection ASC

# Add a client to that salon
hairdora clients add --salonId SALON_ID --name "Ada Lovelace" --email ada@example.com

Todo comando aceita --json para saída analisável, e hairdora schema imprime toda a árvore de comandos como JSON, para que um script nunca precise extrair texto de ajuda. O CLI é open source em github.com/hairdora/cli e publicado como hairdora no npm. Execute qualquer comando com --help para ver suas opções.

Conector de IA

Use o HairDora a partir do seu cliente de IA

Conecte o HairDora ao Claude, ChatGPT, Codex, VS Code ou outro cliente MCP compatível para revisar salões, agendas, disponibilidade, clientes, agendamentos, serviços, status de orçamentos e status de pagamentos na sua organização. A mesma URL remota funciona para todos os usuários; sua conta HairDora conectada determina qual organização está disponível.

Adicione a URL HTTP Streamable abaixo ao seu cliente. Ela o envia ao HairDora para fazer login e aprovar o escopo somente leitura hairdora:read. Você pode revogar a conexão nas configurações da conta HairDora ou desconectá-la no cliente.

# Add this remote MCP URL in Claude, ChatGPT, Codex, VS Code,
# or another Streamable HTTP MCP client:
https://mcp.hairdora.com/mcp

# Sign in to HairDora when your client opens the OAuth flow and approve the
# read-only hairdora:read scope.
# Example: "Show my salon overview and explain the next two weeks of availability."

Instale o Agent Plugin portátil para combinar este conector somente leitura com seu guia de fluxo de trabalho do produto, ou inspecione o catálogo público de descoberta. Manifesto do Agent Plugin Catálogo de IA

O conector tem treze ferramentas somente leitura e dois cartões compactos entre hosts: uma visão geral limitada do salão e um detalhe de agendamento. Ele não pode reservar, remarcar, cancelar ou excluir um agendamento; editar um cliente; criar um orçamento; cobrar ou reembolsar um pagamento; ou mover fundos de qualquer forma.

Nomes de exibição de clientes e identificadores pseudônimos de clientes, agendamentos, salões, serviços, orçamentos e pagamentos são retornados apenas onde necessário para encontrar e encadear registros. E-mail, telefone e endereço do cliente, notas de texto livre, motivos privados do calendário, identificadores de funcionários, dados de cartão de pagamento ou processador, identificadores de organização e registros brutos ilimitados são excluídos. Conecte apenas contas e conversas autorizadas a lidar com os dados do seu salão.

Agent Skills

Ensine seu agente de codificação sobre o HairDora

O HairDora inclui Agent Skills — guias que seguem o padrão agentskills.io e ensinam agentes de codificação a executar fluxos de trabalho de salão com o CLI hairdora e o conector MCP, em vez de adivinhar comandos e ferramentas.

# Install the HairDora skills into your coding agent
npx skills add hairdora/skills

Um único comando instala as skills no Claude Code, Cursor, Codex, Gemini CLI e em qualquer outro agente que siga o padrão Skills. O CLI também inclui os mesmos guias, com versão correspondente aos comandos que ele fornece: hairdora skills get <name> imprime um sob demanda.

As skills são open source em github.com/hairdora/skills. Usuários do Claude também podem instalar o plugin HairDora Claude, que combina o conector com as skills: github.com/hairdora/claude-plugin.

Escopos

Menor privilégio por padrão

Cada chave carrega uma lista de escopos, para que uma integração que só precise ler seu calendário nunca receba a capacidade de alterá-lo. Novas chaves começam somente leitura; amplie-as explicitamente no painel. Uma solicitação cuja chave não tenha o escopo exigido por um endpoint é recusada com 403.

  • appointments:readListar agendamentos e ler um único agendamento.
  • appointments:writeCriar, atualizar e excluir agendamentos.
  • clients:readListar clientes e ler um único cliente.
  • clients:writeCriar, atualizar e excluir clientes.
  • services:readListar serviços e ler um único serviço.
  • services:writeCriar, atualizar e excluir serviços.
  • salons:readListar os salões da sua organização e ler um.

Não existe escopo salons:write: um salão é o contêiner onde seus dados vivem, criado quando você se cadastra, não algo que uma integração cria.

Webhooks

Webhooks assinados

Adicione uma assinatura de webhook ao seu salão e o HairDora envia via POST os eventos que você escolheu para o seu servidor conforme eles acontecem. Uma lista de eventos vazia assina todos eles.

  • appointment.createdUm agendamento foi reservado.
  • appointment.updatedUm agendamento foi movido, remarcado ou editado.
  • appointment.deletedUm agendamento foi excluído.
  • client.createdUm cliente foi adicionado.
  • client.updatedOs detalhes de um cliente mudaram.
  • service.createdUm serviço foi adicionado.
  • service.updatedUm serviço foi editado.
POST https://your-server.com/hairdora-webhook

{
  "event": "appointment.created",
  "timestamp": 1719000000,
  "data": { "...": "..." }
}

Verifique a assinatura

Cada entrega carrega um cabeçalho X-Hairdora-Signature no formato t=timestamp,v1=assinatura, onde a assinatura é um HMAC-SHA256 de timestamp.corpo com chave no segredo da assinatura mostrado a você uma vez quando a assinatura foi criada. Recalcule-o sobre o corpo bruto e compare antes de confiar no payload.

import crypto from 'node:crypto'

// body must be the RAW request body, byte for byte
function verify(header, body, secret) {
  const [t, v1] = (header || '').split(',').map(part => part.split('=')[1])
  if (!t || !v1) return false

  const expected = crypto
    .createHmac('sha256', secret)
    .update(\`${t}.${body}\`)
    .digest('hex')

  // timingSafeEqual throws on a length mismatch, so a malformed signature
  // has to be rejected before the comparison rather than by it.
  if (v1.length !== expected.length) return false

  return crypto.timingSafeEqual(Buffer.from(v1), Buffer.from(expected))
}

A entrega é uma tentativa de melhor esforço com timeout de cinco segundos e sem novas tentativas, então responda 2xx rapidamente e faça o trabalho de forma assíncrona. Um endpoint que falha vinte vezes seguidas é desabilitado automaticamente e precisa ser reabilitado no painel.

Comece a construir