Appearance
Usuários & Autenticação (Staff)
Os usuários staff são quem opera a agenda: dono, gerente, recepcionista e o profissional que entra para ver a própria agenda. Cada instância Booking tem sua própria base de usuários — o mesmo e-mail pode existir em duas unidades diferentes sem conflito.
O primeiro usuário (owner) nasce no setup da instância com o e-mail do dono da conta. Os demais são cadastrados aqui.
Headers obrigatórios
Todas as requisições devem incluir o header X-Booking-Id (UUID) com o identificador da instância. Endpoints privados exigem também Authorization: Bearer {token} com o token de um usuário staff (guard bookingUser). O único endpoint público desta página é o login.
Endpoints
Login
Autentica um usuário staff e retorna o token de acesso (30 dias).
http
POST /v1/booking/user/users/loginPayload (Body)
| Atributo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
email | string | Sim | E-mail do usuário na instância. |
password | string | Sim | Senha do usuário. |
Exemplo de Requisição
bash
curl -X POST "https://api.us.basis.tavares.in/v1/booking/user/users/login" \
-H "X-Booking-Id: 3fa85f64-5717-4562-b3fc-2c963f66afa6" \
-H "Content-Type: application/json" \
-d '{
"email": "ana.souza@studio.com",
"password": "password123"
}'Respostas
200 OK
Retorna o token Bearer da sessão.
json
{
"type": "bearer",
"name": "a2e5fa09-51b0-40b2-af3e-d6c5530cb112",
"token": "oat_MQ.aXJjMFNEbFc1V3AxTzVydFctQi0xQXU5NXVKNkhuYzZaaDA5bks2bTYzNjg1MDMwNA",
"abilities": ["*"],
"lastUsedAt": null,
"expiresAt": "2026-10-13T01:16:25.436Z"
}422 Unprocessable Entity
Ocorre quando as credenciais estão erradas, o e-mail não existe na instância ou o usuário está inativo.
json
{
"errors": [{ "message": "Email/Senha inválida" }]
}Listar Usuários
Lista os usuários staff da instância, com paginação, busca e filtros.
http
GET /v1/booking/user/usersParâmetros de Query
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
page | number | Não | O número da página (mínimo: 1). |
perPage | number | Não | Itens por página (entre 1 e 100, padrão: 25). |
search | string | Não | Busca por nome, sobrenome ou e-mail. |
role | enum | Não | Filtra por papel: owner, manager, receptionist, professional ou staff. |
isActive | boolean | Não | Filtra por usuários ativos/inativos. |
orderBy | enum | Não | id, firstName, lastName, email ou createdAt (padrão: id). |
orderDirection | enum | Não | asc ou desc (padrão: desc). |
Exemplo de Requisição
bash
curl -X GET "https://api.us.basis.tavares.in/v1/booking/user/users?search=ana&role=receptionist" \
-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 usuários no formato meta/data.
json
{
"meta": {
"currentPage": 1,
"perPage": 25
},
"data": [
{
"id": 2,
"bookingId": 1,
"firstName": "Ana",
"lastName": "Souza",
"email": "ana.souza@studio.com",
"role": "receptionist",
"phone": "11999990000",
"avatarUrl": null,
"lastLoginAt": null,
"isActive": true,
"createdAt": "2026-09-10T14:22:10.000+00:00",
"updatedAt": "2026-09-10T14:22:10.000+00:00"
}
]
}Criar Usuário
Cadastra um novo membro da equipe. Exige papel owner ou manager.
http
POST /v1/booking/user/usersPayload (Body)
| Atributo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
firstName | string | Sim | Nome (máx. 100 caracteres). |
lastName | string | Sim | Sobrenome (máx. 100 caracteres). |
email | string | Sim | E-mail único na instância (máx. 250 caracteres). |
password | string | Sim | Senha inicial (8 a 32 caracteres). |
role | enum | Sim | owner, manager, receptionist, professional ou staff. |
phone | string | Não | Telefone (máx. 50 caracteres). |
avatarUrl | string | Não | URL do avatar (máx. 255 caracteres). |
isActive | boolean | Não | Indica se já nasce ativo (padrão: true). |
Exemplo de Requisição
bash
curl -X POST "https://api.us.basis.tavares.in/v1/booking/user/users" \
-H "X-Booking-Id: 3fa85f64-5717-4562-b3fc-2c963f66afa6" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"firstName": "Ana",
"lastName": "Souza",
"email": "ana.souza@studio.com",
"password": "password123",
"role": "receptionist"
}'Respostas
201 Created
Retorna o ID do usuário criado. A senha é armazenada com hash — nunca em texto plano.
json
{
"id": 2
}422 Unprocessable Entity
Ocorre quando o e-mail já existe na instância ou o payload é inválido.
json
{
"errors": [
{
"message": "Email já cadastrado",
"rule": "database.unique",
"field": "email"
}
]
}403 Forbidden
Ocorre quando o usuário autenticado não é owner nem manager (code: FORBIDDEN).
Listar para Dropdown
Retorna os usuários em formato simplificado (value/label com nome completo), ideal para selects — como o vínculo de usuário a um profissional.
http
GET /v1/booking/user/users/listAceita search, role e isActive como filtros opcionais de query.
Exemplo de Requisição
bash
curl -X GET "https://api.us.basis.tavares.in/v1/booking/user/users/list" \
-H "X-Booking-Id: 3fa85f64-5717-4562-b3fc-2c963f66afa6" \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"Respostas
200 OK
Retorna um array com os usuários ordenados por nome.
json
[
{
"value": 2,
"label": "Ana Souza"
}
]Obter Usuário por ID
Recupera os detalhes de um usuário staff da instância.
http
GET /v1/booking/user/users/:idParâmetros de Rota
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | number | Sim | O ID do usuário. |
Respostas
200 OK
Retorna o usuário (sem a senha, que nunca é exposta).
404 Not Found
Ocorre quando o usuário não existe na instância.
Atualizar Usuário
Atualiza dados, papel e status de um membro da equipe. Exige papel owner ou manager.
http
PUT /v1/booking/user/users/:idPayload (Body)
Aceita os mesmos campos da criação; password é opcional aqui — envie apenas para redefinir a senha.
Respostas
204 No Content
Atualização concluída com sucesso.
422 Unprocessable Entity
Ocorre quando o e-mail informado já pertence a outro usuário da instância.
Remover Usuário
Remove um usuário via soft delete. Exige papel owner ou manager.
http
DELETE /v1/booking/user/users/:idRespostas
204 No Content
Remoção concluída com sucesso.
404 Not Found
Ocorre quando o usuário não existe na instância.
A Própria Conta
Endpoints do usuário autenticado — disponíveis para qualquer papel.
Perfil (GET)
http
GET /v1/booking/user/users/meRespostas
200 OK
Retorna os dados do usuário autenticado.
json
{
"id": 1,
"bookingId": 1,
"firstName": "Gerson",
"lastName": "Tavares",
"email": "gerson@studio.com",
"role": "owner",
"phone": null,
"avatarUrl": null,
"lastLoginAt": null,
"isActive": true,
"createdAt": "2026-09-12T22:05:23.790-03:00",
"updatedAt": "2026-09-12T22:05:23.790-03:00"
}Atualizar Perfil (PUT)
http
PUT /v1/booking/user/users/mePayload (Body)
| Atributo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
firstName | string | Sim | Nome (máx. 100 caracteres). |
lastName | string | Sim | Sobrenome (máx. 100 caracteres). |
phone | string | Não | Telefone (máx. 50 caracteres). |
avatarUrl | string | Não | URL do avatar (máx. 255 caracteres). |
Respostas
204 No Content
Perfil atualizado com sucesso.
Trocar Senha
http
PATCH /v1/booking/user/users/change-passwordPayload (Body)
| Atributo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
password | string | Sim | Nova senha (8 a 32 caracteres). |
Exemplo de Requisição
bash
curl -X PATCH "https://api.us.basis.tavares.in/v1/booking/user/users/change-password" \
-H "X-Booking-Id: 3fa85f64-5717-4562-b3fc-2c963f66afa6" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{ "password": "newpassword123" }'Respostas
204 No Content
Senha alterada — o próximo login já usa a nova senha (tokens emitidos continuam válidos).
Logout
Invalida o token atual imediatamente.
http
POST /v1/booking/user/users/logoutRespostas
204 No Content
Logout concluído — o token não pode mais ser usado.