PATCH
/api/v1/calendar/events/{id}Aplica somente os campos enviados. start e end são validados em conjunto com os valores salvos para impedir que a reunião termine antes de começar. Enviar attendees substitui toda a lista. Reuniões sincronizadas com o Google propagam a alteração; reuniões internas continuam internas. Somente native:meeting pode ser alterado nesta rota. Tarefas e etapas de cadência resultam em 422.
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 PATCH \
--url "https://pipefacil-server.matchsales.com.br/api/v1/calendar/events/$ID" \
--header "Authorization: Bearer $PIPEFACIL_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"summary": "Apresentação da proposta revisada"
}'JavaScript
const response = await fetch(`https://pipefacil-server.matchsales.com.br/api/v1/calendar/events/${process.env.ID}`, {
method: "PATCH",
headers: {
Authorization: `Bearer ${process.env.PIPEFACIL_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"summary": "Apresentação da proposta revisada"
}),
});
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(
"PATCH",
f"https://pipefacil-server.matchsales.com.br/api/v1/calendar/events/{os.environ['ID']}",
headers={"Authorization": f"Bearer {os.environ['PIPEFACIL_API_KEY']}"},
json=json.loads("{\n \"summary\": \"Apresentação da proposta revisada\"\n}"),
)
response.raise_for_status()
data = response.json() if response.content else NoneParâmetros
| Nome | Local | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | path | string | Sim | Identificador no formato provider:kind:id, por exemplo, native:meeting:5f2c… |
Corpo da requisição
Content-Type: application/json · obrigatório
{
"summary": "Apresentação da proposta revisada"
}| Campo | Tipo | Obrigatório no objeto | Descrição |
|---|---|---|---|
summary | string | Não | Aceita null. Até 255 caracteres. |
description | string | Não | Aceita null. |
location | string | Não | Aceita null. Até 500 caracteres. |
start | object | Não | Aceita null. |
start.date | string | Não | Data no formato YYYY-MM-DD para eventos de dia inteiro. Formato: date. Aceita null. |
start.dateTime | string | Não | Formato: date-time. Aceita null. |
start.timeZone | string | Não | Fuso IANA. Padrão: fuso do workspace. Aceita null. |
end | object | Não | Aceita null. |
end.date | string | Não | Data no formato YYYY-MM-DD para eventos de dia inteiro. Formato: date. Aceita null. |
end.dateTime | string | Não | Formato: date-time. Aceita null. |
end.timeZone | string | Não | Fuso IANA. Padrão: fuso do workspace. Aceita null. |
allDay | boolean | Não | Aceita null. |
status | string | Não | Aceita null. |
attendees | array | Não | Aceita null. |
attendees[].type | string | Não | Valores: member, contact. |
attendees[].memberId | string | Não | Aceita null. |
attendees[].contactId | string | Não | Aceita null. |
attendees[].responseStatus | string | Não | Valores: needs_action, accepted, declined, tentative. |
attendees[].organizer | boolean | Não | — |
attendees[].optional | boolean | Não | — |
extendedProperties | object | Não | Aceita null. |
recordWithBot | boolean | Não | Aceita null. |
conferenceUrl | string | Não | Aceita null. Até 1000 caracteres. |
Esquema OpenAPI
{
"type": "object",
"description": "Aplica apenas os campos enviados. Enviar attendees substitui toda a lista.",
"properties": {
"summary": {
"type": "string",
"maxLength": 255,
"nullable": true
},
"description": {
"type": "string",
"nullable": true
},
"location": {
"type": "string",
"maxLength": 500,
"nullable": true
},
"start": {
"allOf": [
{
"$ref": "#/components/schemas/EventDateTime"
}
],
"nullable": true
},
"end": {
"allOf": [
{
"$ref": "#/components/schemas/EventDateTime"
}
],
"nullable": true
},
"allDay": {
"type": "boolean",
"nullable": true
},
"status": {
"type": "string",
"nullable": true
},
"attendees": {
"type": "array",
"nullable": true,
"items": {
"$ref": "#/components/schemas/CalendarAttendeeRequest"
}
},
"extendedProperties": {
"type": "object",
"additionalProperties": true,
"nullable": true
},
"recordWithBot": {
"type": "boolean",
"nullable": true
},
"conferenceUrl": {
"type": "string",
"maxLength": 1000,
"nullable": true
}
},
"example": {
"summary": "Apresentação da proposta revisada"
}
}Respostas
200Sucesso
| Campo | Tipo | Descrição |
|---|---|---|
data | CalendarEvent | Formato único do calendário, utilizado por todos os itens, independentemente da fonte. |
data.id | string | provider:kind:id, por exemplo, native:meeting:5f2c… |
data.provider | string | Valores: native, google. |
data.kind | string | Valores: meeting, task, cadence_task. |
data.readOnly | boolean | Não pode ser alterado por esta API; somente reuniões nativas permitem escrita. |
data.status | string | confirmed, tentative, cancelled. |
data.summary | string | — |
data.description | string | Aceita null. |
data.location | string | Aceita null. |
data.start | EventDateTime | Mesmo formato do Google Calendar: date para dia inteiro ou dateTime para instante ISO 8601. Nunca envie ambos. |
data.start.date | string | Data no formato YYYY-MM-DD para eventos de dia inteiro. Formato: date. Aceita null. |
data.start.dateTime | string | Formato: date-time. Aceita null. |
data.start.timeZone | string | Fuso IANA. Padrão: fuso do workspace. Aceita null. |
data.end | EventDateTime | Mesmo formato do Google Calendar: date para dia inteiro ou dateTime para instante ISO 8601. Nunca envie ambos. |
data.end.date | string | Data no formato YYYY-MM-DD para eventos de dia inteiro. Formato: date. Aceita null. |
data.end.dateTime | string | Formato: date-time. Aceita null. |
data.end.timeZone | string | Fuso IANA. Padrão: fuso do workspace. Aceita null. |
data.attendees | array | — |
data.attendees[].type | string | Valores: member, contact. |
data.attendees[].member | object | Aceita null. |
data.attendees[].member.id | string | — |
data.attendees[].member.userId | string | — |
data.attendees[].member.name | string | — |
data.attendees[].member.email | string | — |
data.attendees[].member.image | string | Aceita null. |
data.attendees[].member.role | string | — |
data.attendees[].contact | object | Aceita null. |
data.attendees[].contact.id | string | — |
data.attendees[].contact.displayName | string | — |
data.attendees[].contact.email | string | Aceita null. |
data.attendees[].contact.phone | string | Aceita null. |
data.attendees[].removed | boolean | A identidade não existe mais; o convidado continua no histórico. |
data.attendees[].responseStatus | string | Valores: needs_action, accepted, declined, tentative. |
data.attendees[].organizer | boolean | — |
data.attendees[].optional | boolean | — |
data.owner | object | Nulo quando o membro proprietário saiu do workspace. Aceita null. |
data.owner.userId | string | — |
data.owner.name | string | — |
data.owner.email | string | — |
data.owner.image | string | Aceita null. |
data.owner.role | string | Papel do membro no workspace, por exemplo owner. |
data.owner.id | string | ID do vínculo de membro no workspace. userId identifica o usuário. |
data.extendedProperties | object | Aceita null. |
data.conferenceUrl | string | Link da reunião, independentemente de sua origem. Aceita null. |
data.botEnabled | boolean | O bot de gravação está configurado para esta reunião. |
data.botStatus | string | Último estado informado pelo bot. Aceita null. |
data.created | string | Formato: date-time. Aceita null. |
data.updated | string | Formato: date-time. Aceita null. |
message | string | Aceita null. |
Esquema OpenAPI
{
"type": "object",
"properties": {
"data": {
"$ref": "#/components/schemas/CalendarEvent"
},
"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"
]
}422Requisição válida que o recurso não pode atender, por exemplo, um identificador de calendário que não representa uma reunião nativa.
| 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"
]
}