Pular para o conteúdo

Serviços (services)

O recurso services expõe o catálogo de serviços da sua conta, os mesmos que aparecem na agenda do Ligga. Cada registro traz nome, descrição, categoria, duração padrão, preço e a cor usada para exibir o serviço na agenda.

Móduloagendamentos
Escoposservices:read (também concedido por *:read e por *:write)
Operaçõessomente leitura
MétodoEndpointDescrição
GET/v1/servicesLista serviços, com paginação por cursor
GET/v1/services/{id}Retorna um serviço pelo id
CampoTipoDescrição
iduuidIdentificador do serviço
namestringNome do serviço
descriptionstring | nullDescrição livre do serviço
category_iduuid | nullCategoria do serviço, usada para agrupar na agenda
duration_minutesintegerDuração padrão em minutos
pricenumber | nullPreço do serviço, em reais
requires_staffboolean | nullSe o serviço exige um profissional atribuído
colorstring | nullCor de exibição na agenda, por exemplo #14D484
is_activeboolean | nullSe o serviço está disponível para agendamento
created_atstring (ISO 8601) | nullData de criação
updated_atstring (ISO 8601) | nullData da última atualização

Use fields para receber só um subconjunto das colunas: ?fields=id,name,duration_minutes,price.

A sintaxe do filtro é filter[campo][operador]=valor. Os campos filtráveis de services são:

CampoExemplo
namefilter[name][ilike]=corte%
is_activefilter[is_active][eq]=true
category_idfilter[category_id][eq]=8f3b2d10-6c5e-4a9b-b1d2-0e7f4a6c8d92

Os operadores aceitos são eq, neq, gt, gte, lt, lte, in, nin, ilike e is_null. Um campo fora da lista acima responde 422 validation.

A ordenação usa sort=campo para crescente e sort=-campo para decrescente. Os campos ordenáveis são created_at, updated_at e name. O padrão é -created_at.

A listagem também aceita limit (de 1 a 100, padrão 20) e cursor. Veja Paginação, filtros e ordenação.

Serviços ativos, dois por página:

Terminal window
curl -G "$LIGGA_BASE/v1/services" \
-H "Authorization: Bearer $LIGGA_API_KEY" \
--data-urlencode "limit=2" \
--data-urlencode "filter[is_active][eq]=true"
{
"data": [
{
"id": "3f2c8a1e-9b4d-4c6a-8e2f-1a7d5b9c0e34",
"name": "Corte de cabelo",
"description": "Corte masculino com máquina e tesoura",
"category_id": "8f3b2d10-6c5e-4a9b-b1d2-0e7f4a6c8d92",
"duration_minutes": 45,
"price": 60,
"requires_staff": true,
"color": "#14D484",
"is_active": true,
"created_at": "2026-05-12T14:03:21.512Z",
"updated_at": "2026-06-30T09:41:07.884Z"
},
{
"id": "b91d4e7a-2c3f-48b5-9a6d-4e8c1f0b7a25",
"name": "Barba completa",
"description": null,
"category_id": "8f3b2d10-6c5e-4a9b-b1d2-0e7f4a6c8d92",
"duration_minutes": 30,
"price": 40,
"requires_staff": true,
"color": "#4899C1",
"is_active": true,
"created_at": "2026-05-12T14:05:48.109Z",
"updated_at": null
}
],
"pagination": {
"next_cursor": "eyJpZCI6ImI5MWQ0ZTdhLi4uIiwidiI6IjIwMjYtMDUtMTJUMTQ6MDU6NDguMTA5WiJ9",
"has_more": true,
"limit": 2
},
"meta": { "request_id": "req_01JZXQ8V2K5M7N9P0R1S2T3U4V" }
}

Enquanto pagination.has_more for true, repita a chamada passando cursor=<pagination.next_cursor>.

Buscar por nome usa ilike, em que % é o coringa:

Terminal window
curl -G "$LIGGA_BASE/v1/services" \
-H "Authorization: Bearer $LIGGA_API_KEY" \
--data-urlencode "filter[name][ilike]=corte%" \
--data-urlencode "sort=name"
Terminal window
curl "$LIGGA_BASE/v1/services/3f2c8a1e-9b4d-4c6a-8e2f-1a7d5b9c0e34" \
-H "Authorization: Bearer $LIGGA_API_KEY"
{
"data": {
"id": "3f2c8a1e-9b4d-4c6a-8e2f-1a7d5b9c0e34",
"name": "Corte de cabelo",
"description": "Corte masculino com máquina e tesoura",
"category_id": "8f3b2d10-6c5e-4a9b-b1d2-0e7f4a6c8d92",
"duration_minutes": 45,
"price": 60,
"requires_staff": true,
"color": "#14D484",
"is_active": true,
"created_at": "2026-05-12T14:03:21.512Z",
"updated_at": "2026-06-30T09:41:07.884Z"
},
"meta": { "request_id": "req_01JZXQ8V2K5M7N9P0R1S2T3U4V" }
}
HTTPtypeQuando acontece
401invalid_tokenCabeçalho Authorization ausente ou chave inexistente
403api_disabledA conta ainda não tem a API habilitada
403module_not_enabledMódulo agendamentos fora do contrato
403insufficient_scopeChave sem services:read
404not_foundid inexistente ou pertencente a outra conta
422validationCampo de filtro, operador, sort ou cursor não aceito
429rate-limit-exceededLimite de requisições do plano excedido