Referência da API do Agenda
URL Base: https://agenda.mangati.com
Todos os endpoints estão sob /api. Operações de escrita requerem um Token de Acesso gerado em Admin → Tokens de Acesso.
Authorization: Bearer <token_de_acesso>Endpoints de leitura pública (disponibilidade, categorias) podem não exigir autenticação dependendo da configuração.
Agendamentos
Listar Agendamentos
GET /api/appointments
Authorization: Bearer <token_de_acesso>Filtros por query string:
| Parâmetro | Tipo | Descrição |
|---|---|---|
date | string | Filtrar por data (YYYY-MM-DD) |
documentId | string | Filtrar por documento do cidadão |
code | string | Filtrar por código de agendamento |
location | UUID | Filtrar por ID de localização |
resource | UUID | Filtrar por ID de recurso |
page | inteiro | Número da página |
Exemplo:
curl "https://agenda.mangati.com/api/appointments?date=2024-06-15" \
-H "Authorization: Bearer TOKEN" \
-H "Accept: application/json"Resposta:
[
{
"id": "019e6e9e-556a-7743-b449-9b17d6ac35ef",
"name": "João Silva",
"status": "scheduled",
"date": "2026-06-17",
"time": "13:00",
"resource": {
"id": "018d3793-4f8f-7f44-a6e6-a48ba630646b",
"name": "Carteira de Identidade"
},
"location": {
"id": "018d3793-3352-7158-82a0-e3dac21465d2",
"name": "Centro de Atendimento - Vitória",
"description": "descrição",
"address": {
"streetName": "Rua 1",
"neighborhood": "Centro",
"streetNumber": "100",
"postalCode": "29000000",
"city": "Vitória",
"state": "ES"
},
"timezone": "America/Sao_Paulo"
},
"email": "joao@mangati.com",
"phone": "(27) 99999-8888",
"documentId": "123.456.789-00",
"code": "02YMNC",
"printingInfo": "informação de impressão..."
}
]{
"@context": "/api/contexts/Appointment",
"@id": "/api/appointments",
"@type": "Collection",
"totalItems": 1,
"member": [
{
"@id": "/api/appointments/019e6e9e-556a-7743-b449-9b17d6ac35ef",
"@type": "Appointment",
"id": "019e6e9e-556a-7743-b449-9b17d6ac35ef",
"name": "João Silva",
"status": "scheduled",
"date": "2026-06-17",
"time": "13:00",
"resource": {
"@id": "/api/resources/018d3793-4f8f-7f44-a6e6-a48ba630646b",
"@type": "Resource",
"id": "018d3793-4f8f-7f44-a6e6-a48ba630646b",
"name": "Carteira de Identidade"
},
"location": {
"@id": "/api/locations/018d3793-3352-7158-82a0-e3dac21465d2",
"@type": "Location",
"id": "018d3793-3352-7158-82a0-e3dac21465d2",
"name": "Centro de Atendimento - Vitória",
"description": "descrição",
"address": {
"@type": "AddressDto",
"streetName": "Rua 1",
"neighborhood": "Centro",
"streetNumber": "100",
"postalCode": "29000000",
"city": "Vitória",
"state": "ES"
},
"timezone": "America/Sao_Paulo"
},
"email": "joao@mangati.com",
"phone": "(27) 99999-8888",
"documentId": "123.456.789-00",
"code": "02YMNC",
"printingInfo": "informação de impressão..."
}
]
}Obter Agendamento
GET /api/appointments/{id}
Authorization: Bearer <token_de_acesso>Criar Agendamento
POST /api/appointments
Authorization: Bearer <token_de_acesso>
Content-Type: application/jsonCorpo da requisição:
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | Sim | Nome do cidadão |
resource | UUID | Sim | ID do recurso |
location | UUID | Sim | ID da localização |
date | string | Sim | Data (YYYY-MM-DD) |
time | string | Sim | Horário (HH:MM) |
email | string | Não | E-mail do cidadão |
phone | string | Não | Telefone do cidadão |
documentId | string | Não | Número do documento |
documentType | UUID | Não | ID do tipo de documento |
dateOfBirth | string | Não | Data de nascimento (YYYY-MM-DD) |
Exemplo:
curl -X POST https://agenda.mangati.com/api/appointments \
-H "Authorization: Bearer TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "João Silva",
"resource": "018d3793-4f8f-7f44-a6e6-a48ba630646b",
"location": "018d3793-3352-7158-82a0-e3dac21465d2",
"date": "2024-06-20",
"time": "10:00",
"email": "joao@mangati.com",
"phone": "(27) 99999-8888",
"documentId": "123.456.789-00",
"documentType": "018e4f40-0000-7000-0000-000000000001"
}'Resposta (201):
{
"id": "018e4f35-...",
"name": "João Silva",
"status": "scheduled",
"date": "2024-06-20",
"time": "10:00",
"resource": { "id": "018e4f31-...", "name": "Registro Civil" },
"location": { "id": "018e4f32-...", "name": "Segunda-via" },
"code": "AG240620001",
"printingInfo": "Compareça 15 minutos antes do horário agendado."
}Erros (422): Retorna erros de validação se o horário estiver indisponível ou os dados forem inválidos.
Cancelar Agendamento
DELETE /api/appointments/{id}?code={code}
Authorization: Bearer <token_de_acesso>O parâmetro code é obrigatório e deve corresponder ao código do agendamento (ex.: 02YMNC). Retorna 200 com o objeto agendamento atualizado (status: canceled).
Agendas
Listar Agendas
GET /api/agendas
Authorization: Bearer <token_de_acesso>Exemplo:
curl "https://agenda.mangati.com/api/agendas" \
-H "Authorization: Bearer TOKEN" \
-H "Accept: application/json"Resposta:
[
{
"id": "018d3794-33c4-7e8c-829c-00b20edfaa67",
"resource": {
"id": "018d3793-4f8f-7f44-a6e6-a48ba630646b",
"name": "Carteira de Identidade"
},
"location": {
"id": "018d3793-3352-7158-82a0-e3dac21465d2",
"name": "Centro de Atendimento - Vitória",
"description": "descrição",
"address": {
"streetName": "Rua 1",
"neighborhood": "Centro",
"streetNumber": "100",
"postalCode": "29000000",
"city": "Vitória",
"state": "ES"
},
"timezone": "America/Sao_Paulo"
},
"formDefinition": {
"email": "optional",
"document": "optional",
"phone": "optional",
"dateOfBirth": "optional"
},
"documentTypes": [
{
"id": "018d2991-9883-7441-add3-aef8b399b624",
"name": "CPF"
}
]
}
]{
"@context": "/api/contexts/Agenda",
"@id": "/api/agendas",
"@type": "Collection",
"totalItems": 1,
"member": [
{
"@id": "/api/agendas/018d3794-33c4-7e8c-829c-00b20edfaa67",
"@type": "Agenda",
"id": "018d3794-33c4-7e8c-829c-00b20edfaa67",
"resource": {
"@id": "/api/resources/018d3793-4f8f-7f44-a6e6-a48ba630646b",
"@type": "Resource",
"id": "018d3793-4f8f-7f44-a6e6-a48ba630646b",
"name": "Carteira de Identidade"
},
"location": {
"@id": "/api/locations/018d3793-3352-7158-82a0-e3dac21465d2",
"@type": "Location",
"id": "018d3793-3352-7158-82a0-e3dac21465d2",
"name": "Centro de Atendimento - Vitória",
"description": "descrição",
"address": {
"@type": "AddressDto",
"streetName": "Rua 1",
"neighborhood": "Centro",
"streetNumber": "100",
"postalCode": "29000000",
"city": "Vitória",
"state": "ES"
},
"timezone": "America/Bahia"
},
"formDefinition": {
"@type": "FormDefinitionDto",
"email": "optional",
"document": "optional",
"phone": "optional",
"dateOfBirth": "optional"
},
"documentTypes": [
{
"@id": "/api/document_types/018d2991-9883-7441-add3-aef8b399b624",
"@type": "DocumentType",
"id": "018d2991-9883-7441-add3-aef8b399b624",
"name": "CPF"
}
]
}
]
}O campo formDefinition indica quais campos do formulário de agendamento são exigidos (required), opcionais (optional) ou desabilitados (disabled).
Disponibilidade
Obter Datas Disponíveis
GET /api/agendas/{id}/dates
Authorization: Bearer <token_de_acesso>Parâmetros de query:
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
month | string | Não | Mês a verificar (YYYY-MM, padrão: mês atual) |
Exemplo:
curl "https://agenda.mangati.com/api/agendas/018d3793-4f8f-7f44-a6e6-a48ba630646b/dates" \
-H "Authorization: Bearer TOKEN"Resposta:
[
{ "date": "2024-06-17" },
{ "date": "2024-06-18" },
{ "date": "2024-06-20" }
]Datas não presentes na lista estão totalmente lotadas ou indisponíveis (feriados, fora do turno de trabalho).
Obter Horários Disponíveis
GET /api/agendas/{id}/times?date={date}
Authorization: Bearer <token_de_acesso>Parâmetros de query:
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
date | string | Sim | Data (YYYY-MM-DD) |
Exemplo:
curl "https://agenda.mangati.com/api/agendas/018d3793-4f8f-7f44-a6e6-a48ba630646b/times?date=2024-06-20" \
-H "Authorization: Bearer TOKEN"Resposta:
[
{ "date": "2024-06-20", "time": "09:00" },
{ "date": "2024-06-20", "time": "09:30" },
{ "date": "2024-06-20", "time": "10:00" },
{ "date": "2024-06-20", "time": "10:30" }
]Categorias
GET /api/categories # Listar todas as categorias
GET /api/categories/{id} # Obter categoriaObjeto categoria:
{
"id": "018e4f33-...",
"name": "Registro Civil",
"description": "Certidões de nascimento, casamento e óbito"
}Localizações
GET /api/locations # Listar todas as localizações
GET /api/locations/{id} # Obter localizaçãoObjeto localização:
{
"id": "018d3793-3352-7158-82a0-e3dac21465d2",
"name": "Centro de Atendimento - Vitória",
"description": "descrição",
"address": {
"streetName": "Rua 1",
"neighborhood": "Centro",
"streetNumber": "100",
"postalCode": "29000000",
"city": "Vitória",
"state": "ES"
},
"timezone": "America/Sao_Paulo"
}Recursos
GET /api/resources # Listar todos os recursos
GET /api/resources/{id} # Obter recursoObjeto recurso:
{
"id": "018e4f31-...",
"name": "Registro Civil",
"category": {
"id": "018e4f33-...",
"name": "Registro Civil"
},
"location": {
"id": "018e4f32-...",
"name": "Segunda-via"
}
}Tipos de Documento
GET /api/document-types # Listar tipos de documento
GET /api/document-types/{id} # Obter tipo de documentoExemplo de Agendamento em PHP
// Passo 1: Obter datas disponíveis para a agenda
$datesResponse = $client->get("https://agenda.mangati.com/api/agendas/{$agendaId}/dates", [
'headers' => ['Authorization' => 'Bearer ' . $token],
]);
$dates = json_decode($datesResponse->getBody(), true);
// Passo 2: Obter horários disponíveis para a data escolhida
$timesResponse = $client->get("https://agenda.mangati.com/api/agendas/{$agendaId}/times", [
'headers' => ['Authorization' => 'Bearer ' . $token],
'query' => ['date' => '2024-06-20'],
]);
$times = json_decode($timesResponse->getBody(), true);
// Passo 3: Criar agendamento
$appointment = $client->post('https://agenda.mangati.com/api/appointments', [
'headers' => [
'Authorization' => 'Bearer ' . $token,
'Content-Type' => 'application/json',
],
'json' => [
'name' => 'João Silva',
'resource' => $resourceId,
'location' => $locationId,
'date' => '2024-06-20',
'time' => '10:00',
'email' => 'joao@mangati.com',
'documentId' => '123.456.789-00',
'documentType' => $documentTypeId,
],
]);