/api/v1/calendar/eventsRetorna itens das fontes solicitadas no intervalo, ordenados pelo início, e o status de cada fonte. Fontes indisponíveis são indicadas em sources[] (not_connected, not_authorized, error, truncated), sem falhar toda a requisição.
Visibilidade. A chave representa o membro que a criou. Quem só vê seus próprios dados recebe sua própria agenda; memberId é ignorado. Quem vê todos os dados pode consultar outro membro, exceto um administrador ou o proprietário do workspace. Solicitar explicitamente a agenda desses membros resulta em 403; sem memberId, seus itens são omitidos. O proprietário pode acessar todas as agendas. Reuniões às quais o membro foi convidado são retornadas, independentemente do proprietário da reunião.
Limitação. O limite de itens por fonte e o status de sources[] são calculados antes do filtro de visibilidade. Assim, eventos invisíveis podem contribuir para um erro de limite (422), e uma fonte inteiramente filtrada pode retornar ok e uma lista vazia.
Google Calendar. A conexão é pessoal. Consultar a agenda de outro membro retorna apenas seus itens nativos, sem os eventos da conexão Google desse membro.
Exemplos
A URL usa o servidor de produção. Defina PIPEFACIL_API_KEY e as variáveis de caminho (como SEQ ou ID) com os identificadores reais. Ajuste o corpo antes de executar: requisições de escrita alteram dados do workspace.
cURL
curl --request GET \
--url "https://pipefacil-server.matchsales.com.br/api/v1/calendar/events?timeMin=2026-10-06T00%3A00%3A00Z&timeMax=2026-10-07T00%3A00%3A00Z" \
--header "Authorization: Bearer $PIPEFACIL_API_KEY"JavaScript
const response = await fetch(`https://pipefacil-server.matchsales.com.br/api/v1/calendar/events?timeMin=2026-10-06T00%3A00%3A00Z&timeMax=2026-10-07T00%3A00%3A00Z`, {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.PIPEFACIL_API_KEY}`,
},
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
const text = await response.text();
const data = text ? JSON.parse(text) : null;Python
import os
import json
import requests
response = requests.request(
"GET",
f"https://pipefacil-server.matchsales.com.br/api/v1/calendar/events?timeMin=2026-10-06T00%3A00%3A00Z&timeMax=2026-10-07T00%3A00%3A00Z",
headers={"Authorization": f"Bearer {os.environ['PIPEFACIL_API_KEY']}"},
)
response.raise_for_status()
data = response.json() if response.content else NoneParâmetros
| Nome | Local | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
timeMin | query | string | Sim | Início da janela de consulta, em ISO 8601 e UTC. |
timeMax | query | string | Sim | Fim do intervalo em ISO 8601 UTC. Aceita até 400 dias após timeMin; acima disso, responde 400. |
memberId | query | string | Não | Agenda de outro membro, pelo identificador de membro do workspace. |
provider | query | array de string | Não | Filtro de fontes; pode ser repetido. |
kind | query | array de string | Não | Filtro de tipos de item; pode ser repetido. |
Respostas
200Sucesso
| Campo | Tipo | Descrição |
|---|---|---|
data | object | — |
data.items | array | — |
data.items[].id | string | provider:kind:id, por exemplo, native:meeting:5f2c… |
data.items[].provider | string | Valores: native, google. |
data.items[].kind | string | Valores: meeting, task, cadence_task. |
data.items[].readOnly | boolean | Não pode ser alterado por esta API; somente reuniões nativas permitem escrita. |
data.items[].status | string | confirmed, tentative, cancelled. |
data.items[].summary | string | — |
data.items[].description | string | Aceita null. |
data.items[].location | string | Aceita null. |
data.items[].start | EventDateTime | Mesmo formato do Google Calendar: date para dia inteiro ou dateTime para instante ISO 8601. Nunca envie ambos. |
data.items[].start.date | string | Data no formato YYYY-MM-DD para eventos de dia inteiro. Formato: date. Aceita null. |
data.items[].start.dateTime | string | Formato: date-time. Aceita null. |
data.items[].start.timeZone | string | Fuso IANA. Padrão: fuso do workspace. Aceita null. |
data.items[].end | EventDateTime | Mesmo formato do Google Calendar: date para dia inteiro ou dateTime para instante ISO 8601. Nunca envie ambos. |
data.items[].end.date | string | Data no formato YYYY-MM-DD para eventos de dia inteiro. Formato: date. Aceita null. |
data.items[].end.dateTime | string | Formato: date-time. Aceita null. |
data.items[].end.timeZone | string | Fuso IANA. Padrão: fuso do workspace. Aceita null. |
data.items[].attendees | array | — |
data.items[].attendees[].type | string | Valores: member, contact. |
data.items[].attendees[].member | object | Aceita null. |
data.items[].attendees[].member.id | string | — |
data.items[].attendees[].member.userId | string | — |
data.items[].attendees[].member.name | string | — |
data.items[].attendees[].member.email | string | — |
data.items[].attendees[].member.image | string | Aceita null. |
data.items[].attendees[].member.role | string | — |
data.items[].attendees[].contact | object | Aceita null. |
data.items[].attendees[].contact.id | string | — |
data.items[].attendees[].contact.displayName | string | — |
data.items[].attendees[].contact.email | string | Aceita null. |
data.items[].attendees[].contact.phone | string | Aceita null. |
data.items[].attendees[].removed | boolean | A identidade não existe mais; o convidado continua no histórico. |
data.items[].attendees[].responseStatus | string | Valores: needs_action, accepted, declined, tentative. |
data.items[].attendees[].organizer | boolean | — |
data.items[].attendees[].optional | boolean | — |
data.items[].owner | object | Nulo quando o membro proprietário saiu do workspace. Aceita null. |
data.items[].owner.userId | string | — |
data.items[].owner.name | string | — |
data.items[].owner.email | string | — |
data.items[].owner.image | string | Aceita null. |
data.items[].owner.role | string | Papel do membro no workspace, por exemplo owner. |
data.items[].owner.id | string | ID do vínculo de membro no workspace. userId identifica o usuário. |
data.items[].extendedProperties | object | Aceita null. |
data.items[].conferenceUrl | string | Link da reunião, independentemente de sua origem. Aceita null. |
data.items[].botEnabled | boolean | O bot de gravação está configurado para esta reunião. |
data.items[].botStatus | string | Último estado informado pelo bot. Aceita null. |
data.items[].created | string | Formato: date-time. Aceita null. |
data.items[].updated | string | Formato: date-time. Aceita null. |
data.sources | array | — |
data.sources[].provider | string | Valores: native, google. |
data.sources[].kind | string | Valores: meeting, task, cadence_task. |
data.sources[].status | string | Valores: ok, not_connected, not_authorized, truncated, error. |
data.sources[].message | string | Aceita null. |
message | string | Aceita null. |
Esquema OpenAPI
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"$ref": "#/components/schemas/CalendarEvent"
}
},
"sources": {
"type": "array",
"items": {
"$ref": "#/components/schemas/CalendarSourceStatus"
}
}
}
},
"message": {
"type": "string",
"nullable": true
}
}
}400Falha de validação dos campos; `fieldErrors` contém os erros.
| Campo | Tipo | Descrição |
|---|---|---|
error | string | — |
code | string | Valores: BAD_REQUEST, VALIDATION_ERROR, UNAUTHORIZED, FORBIDDEN, FEATURE_DISABLED, NOT_FOUND, CONFLICT, QUOTA_EXCEEDED, UNPROCESSABLE_ENTITY, INTERNAL_ERROR, SERVICE_UNAVAILABLE. |
requestId | string | — |
details | string | Aceita null. |
fieldErrors | array | Aceita null. |
fieldErrors[].field | string | — |
fieldErrors[].message | string | — |
Esquema OpenAPI
{
"type": "object",
"description": "Formato padrão de erro. `details` e `fieldErrors` são omitidos quando ausentes.",
"properties": {
"error": {
"type": "string"
},
"code": {
"type": "string",
"enum": [
"BAD_REQUEST",
"VALIDATION_ERROR",
"UNAUTHORIZED",
"FORBIDDEN",
"FEATURE_DISABLED",
"NOT_FOUND",
"CONFLICT",
"QUOTA_EXCEEDED",
"UNPROCESSABLE_ENTITY",
"INTERNAL_ERROR",
"SERVICE_UNAVAILABLE"
]
},
"requestId": {
"type": "string"
},
"details": {
"type": "string",
"nullable": true
},
"fieldErrors": {
"type": "array",
"nullable": true,
"items": {
"type": "object",
"properties": {
"field": {
"type": "string"
},
"message": {
"type": "string"
}
}
}
}
},
"required": [
"error",
"code",
"requestId"
]
}401Chave ausente, malformada, desconhecida, revogada ou expirada, ou membro emissor inativo.
| Campo | Tipo | Descrição |
|---|---|---|
error | string | — |
code | string | Valores: BAD_REQUEST, VALIDATION_ERROR, UNAUTHORIZED, FORBIDDEN, FEATURE_DISABLED, NOT_FOUND, CONFLICT, QUOTA_EXCEEDED, UNPROCESSABLE_ENTITY, INTERNAL_ERROR, SERVICE_UNAVAILABLE. |
requestId | string | — |
details | string | Aceita null. |
fieldErrors | array | Aceita null. |
fieldErrors[].field | string | — |
fieldErrors[].message | string | — |
Esquema OpenAPI
{
"type": "object",
"description": "Formato padrão de erro. `details` e `fieldErrors` são omitidos quando ausentes.",
"properties": {
"error": {
"type": "string"
},
"code": {
"type": "string",
"enum": [
"BAD_REQUEST",
"VALIDATION_ERROR",
"UNAUTHORIZED",
"FORBIDDEN",
"FEATURE_DISABLED",
"NOT_FOUND",
"CONFLICT",
"QUOTA_EXCEEDED",
"UNPROCESSABLE_ENTITY",
"INTERNAL_ERROR",
"SERVICE_UNAVAILABLE"
]
},
"requestId": {
"type": "string"
},
"details": {
"type": "string",
"nullable": true
},
"fieldErrors": {
"type": "array",
"nullable": true,
"items": {
"type": "object",
"properties": {
"field": {
"type": "string"
},
"message": {
"type": "string"
}
}
}
}
},
"required": [
"error",
"code",
"requestId"
]
}403Autenticado, mas sem acesso: falta de permissão (`FORBIDDEN`), recurso desligado no workspace (`FEATURE_DISABLED`) ou tentativa de acessar uma agenda não permitida.
| Campo | Tipo | Descrição |
|---|---|---|
error | string | — |
code | string | Valores: BAD_REQUEST, VALIDATION_ERROR, UNAUTHORIZED, FORBIDDEN, FEATURE_DISABLED, NOT_FOUND, CONFLICT, QUOTA_EXCEEDED, UNPROCESSABLE_ENTITY, INTERNAL_ERROR, SERVICE_UNAVAILABLE. |
requestId | string | — |
details | string | Aceita null. |
fieldErrors | array | Aceita null. |
fieldErrors[].field | string | — |
fieldErrors[].message | string | — |
Esquema OpenAPI
{
"type": "object",
"description": "Formato padrão de erro. `details` e `fieldErrors` são omitidos quando ausentes.",
"properties": {
"error": {
"type": "string"
},
"code": {
"type": "string",
"enum": [
"BAD_REQUEST",
"VALIDATION_ERROR",
"UNAUTHORIZED",
"FORBIDDEN",
"FEATURE_DISABLED",
"NOT_FOUND",
"CONFLICT",
"QUOTA_EXCEEDED",
"UNPROCESSABLE_ENTITY",
"INTERNAL_ERROR",
"SERVICE_UNAVAILABLE"
]
},
"requestId": {
"type": "string"
},
"details": {
"type": "string",
"nullable": true
},
"fieldErrors": {
"type": "array",
"nullable": true,
"items": {
"type": "object",
"properties": {
"field": {
"type": "string"
},
"message": {
"type": "string"
}
}
}
}
},
"required": [
"error",
"code",
"requestId"
]
}404Recurso não encontrado ou fora da visibilidade do membro.
| Campo | Tipo | Descrição |
|---|---|---|
error | string | — |
code | string | Valores: BAD_REQUEST, VALIDATION_ERROR, UNAUTHORIZED, FORBIDDEN, FEATURE_DISABLED, NOT_FOUND, CONFLICT, QUOTA_EXCEEDED, UNPROCESSABLE_ENTITY, INTERNAL_ERROR, SERVICE_UNAVAILABLE. |
requestId | string | — |
details | string | Aceita null. |
fieldErrors | array | Aceita null. |
fieldErrors[].field | string | — |
fieldErrors[].message | string | — |
Esquema OpenAPI
{
"type": "object",
"description": "Formato padrão de erro. `details` e `fieldErrors` são omitidos quando ausentes.",
"properties": {
"error": {
"type": "string"
},
"code": {
"type": "string",
"enum": [
"BAD_REQUEST",
"VALIDATION_ERROR",
"UNAUTHORIZED",
"FORBIDDEN",
"FEATURE_DISABLED",
"NOT_FOUND",
"CONFLICT",
"QUOTA_EXCEEDED",
"UNPROCESSABLE_ENTITY",
"INTERNAL_ERROR",
"SERVICE_UNAVAILABLE"
]
},
"requestId": {
"type": "string"
},
"details": {
"type": "string",
"nullable": true
},
"fieldErrors": {
"type": "array",
"nullable": true,
"items": {
"type": "object",
"properties": {
"field": {
"type": "string"
},
"message": {
"type": "string"
}
}
}
}
},
"required": [
"error",
"code",
"requestId"
]
}429Limite de requisições excedido por workspace ou IP.
| Campo | Tipo | Descrição |
|---|---|---|
error | string | — |
code | string | Valores: BAD_REQUEST, VALIDATION_ERROR, UNAUTHORIZED, FORBIDDEN, FEATURE_DISABLED, NOT_FOUND, CONFLICT, QUOTA_EXCEEDED, UNPROCESSABLE_ENTITY, INTERNAL_ERROR, SERVICE_UNAVAILABLE. |
requestId | string | — |
details | string | Aceita null. |
fieldErrors | array | Aceita null. |
fieldErrors[].field | string | — |
fieldErrors[].message | string | — |
Esquema OpenAPI
{
"type": "object",
"description": "Formato padrão de erro. `details` e `fieldErrors` são omitidos quando ausentes.",
"properties": {
"error": {
"type": "string"
},
"code": {
"type": "string",
"enum": [
"BAD_REQUEST",
"VALIDATION_ERROR",
"UNAUTHORIZED",
"FORBIDDEN",
"FEATURE_DISABLED",
"NOT_FOUND",
"CONFLICT",
"QUOTA_EXCEEDED",
"UNPROCESSABLE_ENTITY",
"INTERNAL_ERROR",
"SERVICE_UNAVAILABLE"
]
},
"requestId": {
"type": "string"
},
"details": {
"type": "string",
"nullable": true
},
"fieldErrors": {
"type": "array",
"nullable": true,
"items": {
"type": "object",
"properties": {
"field": {
"type": "string"
},
"message": {
"type": "string"
}
}
}
}
},
"required": [
"error",
"code",
"requestId"
]
}