Skip to content

Profissionais e Vínculos ​

O profissional é quem executa o serviço. Ele fica separado do usuário staff de propósito: nem todo profissional tem login, e nem todo usuário atende cliente — a recepcionista não entra na agenda como recurso disputado.

Duas tabelas de vínculo completam o modelo:

  • Profissional ↔ serviço: quais serviços cada profissional faz (nem todo barbeiro faz tintura), com preço e duração customizados — o sênior cobra mais caro e é mais rápido no mesmo corte.
  • Serviço ↔ recurso: quais recursos um serviço exige — é o que permite alocar automaticamente a Sala 2 quando alguém marca uma sessão de laser.

Headers obrigatórios

Todas as requisições devem incluir o header X-Booking-Id (UUID) e Authorization: Bearer {token} com o token de um usuário staff. A leitura é livre para qualquer papel autenticado; a escrita exige owner ou manager (403 FORBIDDEN caso contrário).


Profissionais ​

Listar Profissionais ​

http
GET /v1/booking/user/professionals

Parâmetros de Query ​

NomeTipoObrigatórioDescrição
page / perPagenumberNãoPaginação (máx. 100 por página).
searchstringNãoBusca por nome.
isActivebooleanNãoFiltra por ativos/inativos.
isBookableOnlinebooleanNãoFiltra os agendáveis pelo portal do cliente.
orderByenumNãoid, name, sortOrder ou createdAt (padrão: sortOrder).
orderDirectionenumNãoasc ou desc (padrão: asc).

Exemplo de Requisição ​

bash
curl -X GET "https://api.us.basis.tavares.in/v1/booking/user/professionals?isBookableOnline=true" \
  -H "X-Booking-Id: 3fa85f64-5717-4562-b3fc-2c963f66afa6" \
  -H "Authorization: Bearer {token}" \
  -H "Accept: application/json"

Respostas ​

200 OK

Retorna a página de profissionais no formato meta/data.

json
{
  "meta": {
    "currentPage": 1,
    "perPage": 25
  },
  "data": [
    {
      "id": 1,
      "bookingId": 1,
      "bookingUserId": 2,
      "name": "Ana Souza",
      "slug": "ana-souza",
      "email": "ana.souza@studio.com",
      "phone": "11999990000",
      "avatarUrl": null,
      "colorCode": "#EC4899",
      "isBookableOnline": true,
      "sortOrder": 0,
      "isActive": true,
      "createdAt": "2026-09-10T14:22:10.000+00:00",
      "updatedAt": "2026-09-10T14:22:10.000+00:00"
    }
  ]
}

Criar Profissional ​

http
POST /v1/booking/user/professionals

Payload (Body) ​

AtributoTipoObrigatórioDescrição
namestringSimNome exibido na agenda e no portal (máx. 150 caracteres). O slug é gerado a partir dele, único por instância.
bookingUserIdnumberNãoVínculo com um usuário staff (deve existir na instância) — é o que libera a "própria agenda" para o papel professional.
emailstringNãoE-mail de contato (válido, máx. 250 caracteres).
phonestringNãoTelefone (máx. 50 caracteres).
biostringNãoBio exibida no portal (máx. 5000 caracteres).
avatarUrlstringNãoFoto (máx. 255 caracteres).
colorCodestringNãoCor na agenda visual (máx. 20 caracteres).
timezonestringNãoFuso próprio (máx. 64 caracteres) — cobre o consultor remoto que atende de outro fuso.
isBookableOnlinebooleanNãoAgendável pelo portal do cliente (padrão: true).
sortOrdernumberNãoOrdem de exibição (mín. 0, padrão: 0).
isActivebooleanNãoIndica se já nasce ativo (padrão: true).

Exemplo de Requisição ​

bash
curl -X POST "https://api.us.basis.tavares.in/v1/booking/user/professionals" \
  -H "X-Booking-Id: 3fa85f64-5717-4562-b3fc-2c963f66afa6" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Ana Souza",
    "bookingUserId": 2,
    "colorCode": "#EC4899",
    "isBookableOnline": true
  }'

Respostas ​

201 Created

Retorna o ID do profissional criado.

json
{
  "id": 1
}

422 Unprocessable Entity

Ocorre quando o bookingUserId não existe na instância ou o payload é inválido.

Obter Profissional por ID ​

http
GET /v1/booking/user/professionals/:id

Retorna o profissional completo (bio, timezone) com o usuário vinculado (bookingUser com id, firstName, lastName, email). Responde 404 quando não existe na instância.

Atualizar Profissional ​

http
PUT /v1/booking/user/professionals/:id

Aceita os mesmos campos da criação. O slug é regenerado apenas quando o nome muda. Responde 204 em caso de sucesso.

Remover Profissional ​

http
DELETE /v1/booking/user/professionals/:id

Soft delete — o histórico de agendamentos é preservado. Responde 204 em caso de sucesso.

Listar para Dropdown ​

http
GET /v1/booking/user/professionals/list

Retorna [{ "value", "label" }] com search, isActive e isBookableOnline opcionais.


Serviços do Profissional ​

Vínculo profissional ↔ serviço. Sem o vínculo, o profissional não aparece como opção ao agendar aquele serviço — e a criação do agendamento falha com 422 PROFESSIONAL_SERVICE_MISMATCH. O vínculo aceita preço e duração customizados, que prevalecem sobre a tabela do serviço.

Listar Vínculos ​

http
GET /v1/booking/user/professional-services

Parâmetros de Query ​

NomeTipoObrigatórioDescrição
page / perPagenumberNãoPaginação (máx. 100 por página).
bookingProfessionalIdnumberNãoFiltra por profissional.
bookingServiceIdnumberNãoFiltra por serviço.

Respostas ​

200 OK

Retorna a página de vínculos com profissional e serviço embutidos.

json
{
  "meta": {
    "currentPage": 1,
    "perPage": 25
  },
  "data": [
    {
      "id": 1,
      "bookingId": 1,
      "bookingProfessionalId": 1,
      "bookingServiceId": 1,
      "customPrice": "120.00",
      "customDurationMinutes": 60,
      "createdAt": "2026-09-10T14:22:10.000+00:00",
      "updatedAt": "2026-09-10T14:22:10.000+00:00",
      "bookingProfessional": { "id": 1, "name": "Ana Souza" },
      "bookingService": { "id": 1, "name": "Corte Masculino" }
    }
  ]
}

Vincular Serviço ao Profissional ​

http
POST /v1/booking/user/professional-services

Payload (Body) ​

AtributoTipoObrigatórioDescrição
bookingProfessionalIdnumberSimProfissional (deve existir na instância).
bookingServiceIdnumberSimServiço (deve existir na instância).
customPricenumberNãoPreço customizado (mín. 0) — prevalece sobre o preço de tabela.
customDurationMinutesnumberNãoDuração customizada em minutos (mín. 1) — prevalece sobre a duração padrão.

Exemplo de Requisição ​

bash
curl -X POST "https://api.us.basis.tavares.in/v1/booking/user/professional-services" \
  -H "X-Booking-Id: 3fa85f64-5717-4562-b3fc-2c963f66afa6" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "bookingProfessionalId": 1,
    "bookingServiceId": 1,
    "customPrice": 120,
    "customDurationMinutes": 60
  }'

Respostas ​

201 Created

Retorna o ID do vínculo criado.

json
{
  "id": 1
}

422 Unprocessable Entity

Ocorre quando o vínculo já existe ("Este serviço já está vinculado ao profissional") ou um dos lados não existe na instância.

Atualizar Vínculo ​

http
PUT /v1/booking/user/professional-services/:id

Payload (Body) ​

AtributoTipoObrigatórioDescrição
customPricenumberNãoNovo preço customizado (null volta ao preço de tabela).
customDurationMinutesnumberNãoNova duração customizada (null volta à duração padrão).

Responde 204 em caso de sucesso.

Remover Vínculo ​

http
DELETE /v1/booking/user/professional-services/:id

Soft delete. Responde 204 em caso de sucesso.


Recursos do Serviço ​

Vínculo serviço ↔ recurso. Quando isRequired é true, o agendamento do serviço aloca automaticamente o primeiro recurso vinculado que estiver ativo e livre na janela — e falha com 422 RESOURCE_UNAVAILABLE se nenhum estiver disponível.

Listar Vínculos ​

http
GET /v1/booking/user/service-resources

Parâmetros de Query ​

NomeTipoObrigatórioDescrição
page / perPagenumberNãoPaginação (máx. 100 por página).
bookingServiceIdnumberNãoFiltra por serviço.
bookingResourceIdnumberNãoFiltra por recurso.

Vincular Recurso ao Serviço ​

http
POST /v1/booking/user/service-resources

Payload (Body) ​

AtributoTipoObrigatórioDescrição
bookingServiceIdnumberSimServiço (deve existir na instância).
bookingResourceIdnumberSimRecurso (deve existir na instância).
isRequiredbooleanNãoIndica se o recurso é obrigatório para o agendamento (padrão: false).

Exemplo de Requisição ​

bash
curl -X POST "https://api.us.basis.tavares.in/v1/booking/user/service-resources" \
  -H "X-Booking-Id: 3fa85f64-5717-4562-b3fc-2c963f66afa6" \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "bookingServiceId": 1,
    "bookingResourceId": 1,
    "isRequired": true
  }'

Respostas ​

201 Created

Retorna o ID do vínculo criado.

json
{
  "id": 1
}

422 Unprocessable Entity

Ocorre quando o vínculo já existe ("Este recurso já está vinculado ao serviço") ou um dos lados não existe na instância.

Atualizar Vínculo ​

http
PUT /v1/booking/user/service-resources/:id

Altera apenas isRequired. Responde 204 em caso de sucesso.

Remover Vínculo ​

http
DELETE /v1/booking/user/service-resources/:id

Soft delete. Responde 204 em caso de sucesso.