Appearance
Recursos Reserváveis
Tudo que pode ser reservado no estabelecimento — quarto, cama balinesa, lancha, prancha, massagem — é modelado com o mesmo par de conceitos:
- Tipo de recurso (resource type): o que se vende. Define a natureza do produto (
kind), a granularidade da reserva (granularity), duração e antecedência mínimas/máximas, buffers de turnaround, limites de ocupação e overbooking. Exemplo: "Quarto Duplo Vista Mar". - Recurso (resource): a unidade física que entra na agenda. Herda as regras do tipo e carrega código, zona, estado de governança e quantidade de unidades. Exemplo: "Quarto 201".
Os recursos com units = 1 são exclusivos: uma única reserva ocupa a unidade inteira (o quarto 201). Recursos com units > 1 são compartilhados: cada reserva consome uma ou mais unidades da mesma agenda — os 20 assentos da lancha (units = 20) aceitam várias reservas até esgotar a capacidade.
As zonas (resource zones) organizam os recursos fisicamente e formam uma hierarquia via parentTourResourceZoneId — ex.: "Área da Piscina" dentro de "Área Externa".
Headers obrigatórios
Todas as requisições devem incluir o header X-Tour-Id (UUID) com o identificador da instância e Authorization: Bearer {token} com o token de um usuário staff (guard toursUser). Não há endpoints públicos nesta página.
Permissão
As mutações (criar, atualizar e remover) dos três recursos desta página exigem a permissão settings.manage. A consulta é livre para qualquer usuário staff autenticado.
Zonas de Recursos (Resource Zones)
Listar Zonas
Lista as zonas da instância, com paginação, busca e filtro por zona pai.
http
GET /v1/tours/user/resource-zonesParâ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). |
search | string | Não | Busca por código ou nome (máx. 150 caracteres). |
parentTourResourceZoneId | number | Não | Filtra pelas zonas filhas de uma zona pai. |
orderBy | enum | Não | id, code, name ou createdAt. |
orderDirection | enum | Não | asc ou desc. |
Exemplo de Requisição
bash
curl -X GET "https://api.us.basis.tavares.in/v1/tours/user/resource-zones?search=piscina" \
-H "X-Tour-Id: 123e4567-e89b-12d3-a456-426614174000" \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"Respostas
200 OK
Retorna a página de zonas no formato meta/data.
json
{
"meta": {
"currentPage": 1,
"perPage": 10
},
"data": [
{
"id": 1,
"tourId": 1,
"parentTourResourceZoneId": null,
"code": "YWEDB8",
"name": "Shoes",
"createdAt": "2026-10-07T11:56:13.862-03:00",
"updatedAt": "2026-10-07T11:56:13.862-03:00"
}
]
}Criar Zona
Cadastra uma zona, opcionalmente dentro de outra (hierarquia). Exige a permissão settings.manage.
http
POST /v1/tours/user/resource-zonesPayload (Body)
| Atributo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
code | string | Sim | Código único da zona (máx. 50 caracteres). |
name | string | Sim | Nome da zona (máx. 150 caracteres). |
parentTourResourceZoneId | number | Não | ID da zona pai — cria a hierarquia (deve existir na instância). |
Exemplo de Requisição
bash
curl -X POST "https://api.us.basis.tavares.in/v1/tours/user/resource-zones" \
-H "X-Tour-Id: 123e4567-e89b-12d3-a456-426614174000" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"code": "DOC-ZONE-01",
"name": "Zona Doc",
"parentTourResourceZoneId": 1
}'Respostas
201 Created
Retorna o ID da zona criada.
json
{
"id": 4
}422 Unprocessable Entity
Ocorre quando o payload é inválido ou a zona pai não existe na instância.
403 Forbidden
Ocorre quando o usuário autenticado não possui a permissão settings.manage (code: FORBIDDEN).
Listar Zonas para Dropdown
Retorna as zonas em formato simplificado (value/label), ideal para selects.
http
GET /v1/tours/user/resource-zones/listAceita search e limit (1 a 500) como parâmetros opcionais de query.
Exemplo de Requisição
bash
curl -X GET "https://api.us.basis.tavares.in/v1/tours/user/resource-zones/list" \
-H "X-Tour-Id: 123e4567-e89b-12d3-a456-426614174000" \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"Respostas
200 OK
Retorna um array com as zonas.
json
[
{
"value": 1,
"label": "Shoes"
},
{
"value": 4,
"label": "Zona Doc"
}
]Obter Zona por ID
Recupera os detalhes de uma zona, incluindo a zona pai.
http
GET /v1/tours/user/resource-zones/:idParâmetros de Rota
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | number | Sim | O ID da zona. |
Respostas
200 OK
Retorna a zona com a zona pai relacionada.
json
{
"id": 4,
"tourId": 1,
"parentTourResourceZoneId": 1,
"code": "DOC-ZONE-01",
"name": "Zona Doc",
"createdAt": "2026-10-07T15:11:04.881-03:00",
"updatedAt": "2026-10-07T15:11:04.881-03:00",
"parentTourResourceZone": {
"id": 1,
"code": "YWEDB8",
"name": "Shoes"
}
}404 Not Found
Ocorre quando a zona não existe na instância.
Atualizar Zona
Atualiza código, nome ou zona pai. Exige a permissão settings.manage.
http
PUT /v1/tours/user/resource-zones/:idPayload (Body)
Aceita os mesmos campos da criação, todos opcionais — envie apenas o que deve mudar.
Exemplo de Requisição
bash
curl -X PUT "https://api.us.basis.tavares.in/v1/tours/user/resource-zones/4" \
-H "X-Tour-Id: 123e4567-e89b-12d3-a456-426614174000" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"code": "DOC-ZONE-01",
"name": "Zona Doc Editada",
"parentTourResourceZoneId": 1
}'Respostas
204 No Content
Atualização concluída com sucesso.
403 Forbidden
Ocorre quando o usuário autenticado não possui a permissão settings.manage (code: FORBIDDEN).
Remover Zona
Remove uma zona via soft delete. Exige a permissão settings.manage.
http
DELETE /v1/tours/user/resource-zones/:idRespostas
204 No Content
Remoção concluída com sucesso.
403 Forbidden
Ocorre quando o usuário autenticado não possui a permissão settings.manage (code: FORBIDDEN).
Tipos de Recurso (Resource Types)
O tipo concentra as regras comerciais e operacionais compartilhadas por todas as unidades físicas:
kind— a natureza do que se vende:accommodation(quartos),space(camas de praia, mesas),activity(passeios),equipment(pranchas, bikes) ouservice(massagens).granularity— a unidade de tempo da reserva:minute,hour,night,dayouslot(janela fixa definida pela agenda de disponibilidade).- Duração e antecedência —
minDurationMinutes/maxDurationMinuteslimitam o tamanho da reserva;minLeadTimeMinutes/maxLeadTimeMinuteslimitam com quanta antecedência ela pode ser feita. - Buffers de turnaround —
bufferBeforeMinutes/bufferAfterMinutesbloqueiam a agenda antes/depois de cada ocupação (limpeza do quarto, preparação do barco). O buffer compete pela mesma agenda das reservas — nenhuma reserva colide com ele. - Ocupação e overbooking —
defaultOccupancy(hóspedes inclusos),maxOccupancy(capacidade máxima) eoverbookingLimit(quantas unidades além da capacidade física podem ser vendidas —0desliga). requiresAssignment— quandotrue, a reserva precisa de um recurso físico atribuído (ver Reservas & Alocações); quandofalse, vende-se o tipo sem alocar unidade.
Listar Tipos
Lista os tipos de recurso da instância, com paginação, busca e filtros.
http
GET /v1/tours/user/resource-typesParâ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). |
search | string | Não | Busca por código ou nome (máx. 150 caracteres). |
kind | enum | Não | accommodation, space, activity, equipment ou service. |
granularity | enum | Não | minute, hour, night, day ou slot. |
isActive | boolean | Não | Filtra por tipos ativos/inativos. |
orderBy | enum | Não | id, code, name, kind ou createdAt. |
orderDirection | enum | Não | asc ou desc. |
Exemplo de Requisição
bash
curl -X GET "https://api.us.basis.tavares.in/v1/tours/user/resource-types?kind=accommodation" \
-H "X-Tour-Id: 123e4567-e89b-12d3-a456-426614174000" \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"Respostas
200 OK
Retorna a página de tipos no formato meta/data.
json
{
"meta": {
"currentPage": 1,
"perPage": 10
},
"data": []
}Criar Tipo
Cadastra um tipo de recurso com suas regras. Exige a permissão settings.manage.
http
POST /v1/tours/user/resource-typesPayload (Body)
| Atributo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
code | string | Sim | Código único do tipo (máx. 50 caracteres). |
kind | enum | Sim | accommodation, space, activity, equipment ou service. |
name | string | Sim | Nome comercial do tipo (máx. 150 caracteres). |
granularity | enum | Sim | minute, hour, night, day ou slot. |
tourTaxGroupId | number | Não | Grupo de impostos aplicável (deve existir na instância). |
description | string | Não | Descrição curta (máx. 255 caracteres). |
minDurationMinutes | number | Não | Duração mínima da reserva, em minutos (mín. 0). |
maxDurationMinutes | number | Não | Duração máxima da reserva, em minutos (mín. 0). |
minLeadTimeMinutes | number | Não | Antecedência mínima para reservar, em minutos (mín. 0). |
maxLeadTimeMinutes | number | Não | Antecedência máxima para reservar, em minutos (mín. 0). |
bufferBeforeMinutes | number | Não | Buffer de turnaround antes da ocupação, em minutos (padrão: 0). |
bufferAfterMinutes | number | Não | Buffer de turnaround após a ocupação, em minutos (padrão: 0). |
defaultOccupancy | number | Não | Ocupação padrão inclusa no preço (mín. 0). |
maxOccupancy | number | Não | Ocupação máxima permitida (mín. 0). |
overbookingLimit | number | Não | Unidades vendáveis além da capacidade física (padrão: 0 — desligado). |
requiresAssignment | boolean | Não | Se a reserva exige atribuição de um recurso físico (padrão: false). |
attributes | object | Não | Atributos livres em JSON (ex.: comodidades do quarto). |
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/tours/user/resource-types" \
-H "X-Tour-Id: 123e4567-e89b-12d3-a456-426614174000" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"code": "DOC-RT-01",
"kind": "accommodation",
"name": "Tipo Doc",
"granularity": "night",
"tourTaxGroupId": 1,
"description": "Tipo de recurso para documentação",
"defaultOccupancy": 2,
"maxOccupancy": 4,
"isActive": true
}'Respostas
201 Created
Retorna o ID do tipo criado.
json
{
"id": 4
}422 Unprocessable Entity
Ocorre quando o payload é inválido ou o grupo de impostos não existe na instância.
403 Forbidden
Ocorre quando o usuário autenticado não possui a permissão settings.manage (code: FORBIDDEN).
Listar Tipos para Dropdown
Retorna os tipos em formato simplificado (value/label), ideal para selects.
http
GET /v1/tours/user/resource-types/listAceita search, kind, isActive e limit (1 a 500) como parâmetros opcionais de query.
Exemplo de Requisição
bash
curl -X GET "https://api.us.basis.tavares.in/v1/tours/user/resource-types/list?kind=accommodation" \
-H "X-Tour-Id: 123e4567-e89b-12d3-a456-426614174000" \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"Respostas
200 OK
Retorna um array com os tipos.
json
[
{
"value": 1,
"label": "Frozen Marble Chair"
},
{
"value": 4,
"label": "Tipo Doc"
}
]Obter Tipo por ID
Recupera todos os detalhes e regras de um tipo de recurso.
http
GET /v1/tours/user/resource-types/:idParâmetros de Rota
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | number | Sim | O ID do tipo. |
Respostas
200 OK
Retorna o tipo com o grupo de impostos relacionado.
json
{
"id": 4,
"tourId": 1,
"tourTaxGroupId": 1,
"code": "DOC-RT-01",
"kind": "accommodation",
"name": "Tipo Doc",
"description": "Tipo de recurso para documentação",
"granularity": "night",
"minDurationMinutes": null,
"maxDurationMinutes": null,
"minLeadTimeMinutes": null,
"maxLeadTimeMinutes": null,
"bufferBeforeMinutes": 0,
"bufferAfterMinutes": 0,
"defaultOccupancy": 2,
"maxOccupancy": 4,
"overbookingLimit": 0,
"requiresAssignment": false,
"attributes": {},
"isActive": true,
"createdAt": "2026-10-07T15:11:04.082-03:00",
"updatedAt": "2026-10-07T15:11:04.082-03:00",
"toursTaxGroup": {
"id": 1,
"code": "WMGCLJKQ",
"name": "Electronics"
}
}404 Not Found
Ocorre quando o tipo não existe na instância.
Atualizar Tipo
Atualiza as regras de um tipo de recurso. Exige a permissão settings.manage.
http
PUT /v1/tours/user/resource-types/:idPayload (Body)
Aceita os mesmos campos da criação, todos opcionais — envie apenas o que deve mudar.
Exemplo de Requisição
bash
curl -X PUT "https://api.us.basis.tavares.in/v1/tours/user/resource-types/4" \
-H "X-Tour-Id: 123e4567-e89b-12d3-a456-426614174000" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"code": "DOC-RT-01",
"kind": "accommodation",
"name": "Tipo Doc Editado",
"granularity": "night",
"tourTaxGroupId": 1,
"description": "Tipo de recurso para documentação (editado)",
"defaultOccupancy": 2,
"maxOccupancy": 5,
"isActive": true
}'Respostas
204 No Content
Atualização concluída com sucesso.
403 Forbidden
Ocorre quando o usuário autenticado não possui a permissão settings.manage (code: FORBIDDEN).
Remover Tipo
Remove um tipo via soft delete. Exige a permissão settings.manage.
http
DELETE /v1/tours/user/resource-types/:idRespostas
204 No Content
Remoção concluída com sucesso.
403 Forbidden
Ocorre quando o usuário autenticado não possui a permissão settings.manage (code: FORBIDDEN).
Recursos (Resources)
O recurso é a unidade física que entra na agenda. Além do vínculo com tipo e zona, ele carrega:
units— quantidade de unidades vendáveis na mesma agenda:1para recursos exclusivos (o quarto inteiro),Npara compartilhados (assentos da lancha, vagas do passeio).maxOccupancy— sobrescreve a ocupação máxima do tipo para esta unidade específica (um quarto com cama extra).housekeepingState— o estado de governança da unidade:dirty,cleaning,clean,inspectedouout_of_service(ver Governança & Manutenção).
Listar Recursos
Lista os recursos da instância, com paginação e filtros por tipo, zona e estado de governança.
http
GET /v1/tours/user/resourcesParâ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). |
search | string | Não | Busca por código ou label (máx. 150 caracteres). |
tourResourceTypeId | number | Não | Filtra por tipo de recurso. |
tourResourceZoneId | number | Não | Filtra por zona. |
housekeepingState | enum | Não | dirty, cleaning, clean, inspected ou out_of_service. |
isActive | boolean | Não | Filtra por recursos ativos/inativos. |
orderBy | enum | Não | id, code ou createdAt. |
orderDirection | enum | Não | asc ou desc. |
Exemplo de Requisição
bash
curl -X GET "https://api.us.basis.tavares.in/v1/tours/user/resources?housekeepingState=clean" \
-H "X-Tour-Id: 123e4567-e89b-12d3-a456-426614174000" \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"Respostas
200 OK
Retorna a página de recursos no formato meta/data.
json
{
"meta": {
"currentPage": 1,
"perPage": 10
},
"data": [
{
"id": 1,
"tourId": 1,
"tourResourceTypeId": 1,
"tourResourceZoneId": 1,
"code": "PGOXAM",
"label": "Sleek Plastic Hat",
"units": 1,
"maxOccupancy": null,
"housekeepingState": "clean",
"isActive": true,
"createdAt": "2026-10-07T11:56:14.123-03:00",
"updatedAt": "2026-10-07T11:56:14.123-03:00"
}
]
}Criar Recurso
Cadastra uma unidade física vinculada a um tipo. Exige a permissão settings.manage.
http
POST /v1/tours/user/resourcesPayload (Body)
| Atributo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
tourResourceTypeId | number | Sim | ID do tipo de recurso (deve existir na instância). |
code | string | Sim | Código único da unidade (máx. 50 caracteres), ex.: 101, LANCHA-01. |
tourResourceZoneId | number | Não | ID da zona onde a unidade fica (deve existir na instância). |
label | string | Não | Nome de exibição da unidade (máx. 150 caracteres). |
units | number | Não | Unidades vendáveis na mesma agenda — 1 exclusivo, N compartilhado (padrão: 1). |
maxOccupancy | number | Não | Ocupação máxima desta unidade — sobrescreve o tipo (mín. 0). |
housekeepingState | enum | Não | dirty, cleaning, clean, inspected ou out_of_service (padrão: clean). |
attributes | object | Não | Atributos livres em JSON (ex.: andar, vista, número de camas). |
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/tours/user/resources" \
-H "X-Tour-Id: 123e4567-e89b-12d3-a456-426614174000" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"code": "DOC-01",
"label": "Quarto Doc",
"units": 1,
"tourResourceTypeId": 1,
"tourResourceZoneId": 1,
"isActive": true
}'Respostas
201 Created
Retorna o ID do recurso criado.
json
{
"id": 5
}422 Unprocessable Entity
Ocorre quando o payload é inválido ou o tipo/zona informados não existem na instância.
403 Forbidden
Ocorre quando o usuário autenticado não possui a permissão settings.manage (code: FORBIDDEN).
Listar Recursos para Dropdown
Retorna os recursos em formato simplificado (value/label com o código), ideal para selects — como a atribuição de unidade a uma reserva.
http
GET /v1/tours/user/resources/listAceita search, tourResourceTypeId, tourResourceZoneId, isActive e limit (1 a 500) como parâmetros opcionais de query.
Exemplo de Requisição
bash
curl -X GET "https://api.us.basis.tavares.in/v1/tours/user/resources/list?tourResourceTypeId=1" \
-H "X-Tour-Id: 123e4567-e89b-12d3-a456-426614174000" \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"Respostas
200 OK
Retorna um array com os recursos.
json
[
{
"value": 5,
"label": "DOC-01"
},
{
"value": 1,
"label": "PGOXAM"
}
]Obter Recurso por ID
Recupera os detalhes de uma unidade, incluindo tipo e zona relacionados.
http
GET /v1/tours/user/resources/:idParâmetros de Rota
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | number | Sim | O ID do recurso. |
Respostas
200 OK
Retorna o recurso com tipo e zona relacionados.
json
{
"id": 5,
"tourId": 1,
"tourResourceTypeId": 1,
"tourResourceZoneId": 1,
"code": "DOC-01",
"label": "Quarto Doc",
"units": 1,
"maxOccupancy": null,
"housekeepingState": "clean",
"attributes": {},
"isActive": true,
"createdAt": "2026-10-07T15:11:05.699-03:00",
"updatedAt": "2026-10-07T15:11:05.699-03:00",
"toursResourceZone": {
"id": 1,
"code": "YWEDB8",
"name": "Shoes"
},
"toursResourceType": {
"id": 1,
"code": "SJZSKZ",
"name": "Frozen Marble Chair",
"kind": "activity"
}
}404 Not Found
Ocorre quando o recurso não existe na instância.
Atualizar Recurso
Atualiza os dados de uma unidade física. Exige a permissão settings.manage.
http
PUT /v1/tours/user/resources/:idPayload (Body)
Aceita os mesmos campos da criação, todos opcionais — envie apenas o que deve mudar. Mudanças pontuais de housekeepingState na operação diária são feitas pela governança (ver Governança & Manutenção).
Exemplo de Requisição
bash
curl -X PUT "https://api.us.basis.tavares.in/v1/tours/user/resources/5" \
-H "X-Tour-Id: 123e4567-e89b-12d3-a456-426614174000" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"code": "DOC-01",
"label": "Quarto Doc Editado",
"units": 1,
"tourResourceTypeId": 1,
"isActive": true
}'Respostas
204 No Content
Atualização concluída com sucesso.
403 Forbidden
Ocorre quando o usuário autenticado não possui a permissão settings.manage (code: FORBIDDEN).
Remover Recurso
Remove uma unidade via soft delete. Exige a permissão settings.manage.
http
DELETE /v1/tours/user/resources/:idRespostas
204 No Content
Remoção concluída com sucesso.
403 Forbidden
Ocorre quando o usuário autenticado não possui a permissão settings.manage (code: FORBIDDEN).