Ir para o conteúdo

Criar reunião

POST/api/v1/calendar/events

Cria uma reunião no calendário nativo com o membro da chave como proprietário. O proprietário nunca vem do corpo da requisição. createConference solicita um link do Google Meet e implica syncToGoogle. Ambas as opções exigem conexão Google com permissão de escrita. Se o Google falhar, a criação inteira falha. recordWithBot exige um link de conferência criado nesta chamada ou informado em conferenceUrl; o bot participa apenas do Google Meet ou Microsoft Teams.

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 POST \
  --url "https://pipefacil-server.matchsales.com.br/api/v1/calendar/events" \
  --header "Authorization: Bearer $PIPEFACIL_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
  "summary": "Apresentação da proposta",
  "start": {
    "dateTime": "2026-10-06T14:00:00-03:00",
    "timeZone": "America/Sao_Paulo"
  },
  "end": {
    "dateTime": "2026-10-06T14:30:00-03:00",
    "timeZone": "America/Sao_Paulo"
  },
  "allDay": false
}'
JavaScript
const response = await fetch(`https://pipefacil-server.matchsales.com.br/api/v1/calendar/events`, {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.PIPEFACIL_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
  "summary": "Apresentação da proposta",
  "start": {
    "dateTime": "2026-10-06T14:00:00-03:00",
    "timeZone": "America/Sao_Paulo"
  },
  "end": {
    "dateTime": "2026-10-06T14:30:00-03:00",
    "timeZone": "America/Sao_Paulo"
  },
  "allDay": false
}),
});

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(
    "POST",
    f"https://pipefacil-server.matchsales.com.br/api/v1/calendar/events",
    headers={"Authorization": f"Bearer {os.environ['PIPEFACIL_API_KEY']}"},
    json=json.loads("{\n  \"summary\": \"Apresentação da proposta\",\n  \"start\": {\n    \"dateTime\": \"2026-10-06T14:00:00-03:00\",\n    \"timeZone\": \"America/Sao_Paulo\"\n  },\n  \"end\": {\n    \"dateTime\": \"2026-10-06T14:30:00-03:00\",\n    \"timeZone\": \"America/Sao_Paulo\"\n  },\n  \"allDay\": false\n}"),
)
response.raise_for_status()
data = response.json() if response.content else None

Corpo da requisição

Content-Type: application/json · obrigatório

{
  "summary": "Apresentação da proposta",
  "start": {
    "dateTime": "2026-10-06T14:00:00-03:00",
    "timeZone": "America/Sao_Paulo"
  },
  "end": {
    "dateTime": "2026-10-06T14:30:00-03:00",
    "timeZone": "America/Sao_Paulo"
  },
  "allDay": false
}
CampoTipoObrigatório no objetoDescrição
summarystringSimAté 255 caracteres.
descriptionstringNãoAceita null.
locationstringNãoAceita null. Até 500 caracteres.
startEventDateTimeSimMesmo formato do Google Calendar: date para dia inteiro ou dateTime para instante ISO 8601. Nunca envie ambos.
start.datestringNãoData no formato YYYY-MM-DD para eventos de dia inteiro. Formato: date. Aceita null.
start.dateTimestringNãoFormato: date-time. Aceita null.
start.timeZonestringNãoFuso IANA. Padrão: fuso do workspace. Aceita null.
endEventDateTimeSimMesmo formato do Google Calendar: date para dia inteiro ou dateTime para instante ISO 8601. Nunca envie ambos.
end.datestringNãoData no formato YYYY-MM-DD para eventos de dia inteiro. Formato: date. Aceita null.
end.dateTimestringNãoFormato: date-time. Aceita null.
end.timeZonestringNãoFuso IANA. Padrão: fuso do workspace. Aceita null.
allDaybooleanNãoAceita null.
statusstringNãoconfirmed (padrão), tentative, cancelled. Aceita null.
attendeesarrayNãoCada entrada usa { type: member, memberId } ou { type: contact, contactId }. Identificador desconhecido resulta em 400. Aceita null.
attendees[].typestringNãoValores: member, contact.
attendees[].memberIdstringNãoAceita null.
attendees[].contactIdstringNãoAceita null.
attendees[].responseStatusstringNãoValores: needs_action, accepted, declined, tentative.
attendees[].organizerbooleanNão—
attendees[].optionalbooleanNão—
extendedPropertiesobjectNãoAceita null.
syncToGooglebooleanNãoSincroniza a reunião no Google Calendar do proprietário. Exige conexão com permissão de escrita. Aceita null.
createConferencebooleanNãoSolicita um link do Google Meet. Implica syncToGoogle. Aceita null.
recordWithBotbooleanNãoSolicita gravação pelo bot. Requer link de Google Meet ou Microsoft Teams; caso contrário, retorna 400. Aceita null.
conferenceUrlstringNãoLink de reunião existente, quando não estiver criando uma conferência. Para gravação pelo bot, use Google Meet ou Microsoft Teams. Aceita null. Até 1000 caracteres.
Esquema OpenAPI
{
  "type": "object",
  "required": [
    "summary",
    "start",
    "end"
  ],
  "properties": {
    "summary": {
      "type": "string",
      "maxLength": 255
    },
    "description": {
      "type": "string",
      "nullable": true
    },
    "location": {
      "type": "string",
      "maxLength": 500,
      "nullable": true
    },
    "start": {
      "$ref": "#/components/schemas/EventDateTime"
    },
    "end": {
      "$ref": "#/components/schemas/EventDateTime"
    },
    "allDay": {
      "type": "boolean",
      "nullable": true
    },
    "status": {
      "type": "string",
      "nullable": true,
      "description": "confirmed (padrão), tentative, cancelled."
    },
    "attendees": {
      "type": "array",
      "nullable": true,
      "description": "Cada entrada usa { type: member, memberId } ou { type: contact, contactId }. Identificador desconhecido resulta em `400`.",
      "items": {
        "$ref": "#/components/schemas/CalendarAttendeeRequest"
      }
    },
    "extendedProperties": {
      "type": "object",
      "additionalProperties": true,
      "nullable": true
    },
    "syncToGoogle": {
      "type": "boolean",
      "nullable": true,
      "description": "Sincroniza a reunião no Google Calendar do proprietário. Exige conexão com permissão de escrita."
    },
    "createConference": {
      "type": "boolean",
      "nullable": true,
      "description": "Solicita um link do Google Meet. Implica syncToGoogle."
    },
    "recordWithBot": {
      "type": "boolean",
      "nullable": true,
      "description": "Solicita gravação pelo bot. Requer link de Google Meet ou Microsoft Teams; caso contrário, retorna 400."
    },
    "conferenceUrl": {
      "type": "string",
      "maxLength": 1000,
      "nullable": true,
      "description": "Link de reunião existente, quando não estiver criando uma conferência. Para gravação pelo bot, use Google Meet ou Microsoft Teams."
    }
  },
  "example": {
    "summary": "Apresentação da proposta",
    "start": {
      "dateTime": "2026-10-06T14:00:00-03:00",
      "timeZone": "America/Sao_Paulo"
    },
    "end": {
      "dateTime": "2026-10-06T14:30:00-03:00",
      "timeZone": "America/Sao_Paulo"
    },
    "allDay": false
  }
}

Respostas

201Criado
CampoTipoDescrição
dataCalendarEventFormato único do calendário, utilizado por todos os itens, independentemente da fonte.
data.idstringprovider:kind:id, por exemplo, native:meeting:5f2c…
data.providerstringValores: native, google.
data.kindstringValores: meeting, task, cadence_task.
data.readOnlybooleanNão pode ser alterado por esta API; somente reuniões nativas permitem escrita.
data.statusstringconfirmed, tentative, cancelled.
data.summarystring—
data.descriptionstringAceita null.
data.locationstringAceita null.
data.startEventDateTimeMesmo formato do Google Calendar: date para dia inteiro ou dateTime para instante ISO 8601. Nunca envie ambos.
data.start.datestringData no formato YYYY-MM-DD para eventos de dia inteiro. Formato: date. Aceita null.
data.start.dateTimestringFormato: date-time. Aceita null.
data.start.timeZonestringFuso IANA. Padrão: fuso do workspace. Aceita null.
data.endEventDateTimeMesmo formato do Google Calendar: date para dia inteiro ou dateTime para instante ISO 8601. Nunca envie ambos.
data.end.datestringData no formato YYYY-MM-DD para eventos de dia inteiro. Formato: date. Aceita null.
data.end.dateTimestringFormato: date-time. Aceita null.
data.end.timeZonestringFuso IANA. Padrão: fuso do workspace. Aceita null.
data.attendeesarray—
data.attendees[].typestringValores: member, contact.
data.attendees[].memberobjectAceita null.
data.attendees[].member.idstring—
data.attendees[].member.userIdstring—
data.attendees[].member.namestring—
data.attendees[].member.emailstring—
data.attendees[].member.imagestringAceita null.
data.attendees[].member.rolestring—
data.attendees[].contactobjectAceita null.
data.attendees[].contact.idstring—
data.attendees[].contact.displayNamestring—
data.attendees[].contact.emailstringAceita null.
data.attendees[].contact.phonestringAceita null.
data.attendees[].removedbooleanA identidade não existe mais; o convidado continua no histórico.
data.attendees[].responseStatusstringValores: needs_action, accepted, declined, tentative.
data.attendees[].organizerboolean—
data.attendees[].optionalboolean—
data.ownerobjectNulo quando o membro proprietário saiu do workspace. Aceita null.
data.owner.userIdstring—
data.owner.namestring—
data.owner.emailstring—
data.owner.imagestringAceita null.
data.owner.rolestringPapel do membro no workspace, por exemplo owner.
data.owner.idstringID do vínculo de membro no workspace. userId identifica o usuário.
data.extendedPropertiesobjectAceita null.
data.conferenceUrlstringLink da reunião, independentemente de sua origem. Aceita null.
data.botEnabledbooleanO bot de gravação está configurado para esta reunião.
data.botStatusstringÚltimo estado informado pelo bot. Aceita null.
data.createdstringFormato: date-time. Aceita null.
data.updatedstringFormato: date-time. Aceita null.
messagestringAceita 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.
CampoTipoDescrição
errorstring—
codestringValores: BAD_REQUEST, VALIDATION_ERROR, UNAUTHORIZED, FORBIDDEN, FEATURE_DISABLED, NOT_FOUND, CONFLICT, QUOTA_EXCEEDED, UNPROCESSABLE_ENTITY, INTERNAL_ERROR, SERVICE_UNAVAILABLE.
requestIdstring—
detailsstringAceita null.
fieldErrorsarrayAceita null.
fieldErrors[].fieldstring—
fieldErrors[].messagestring—
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.
CampoTipoDescrição
errorstring—
codestringValores: BAD_REQUEST, VALIDATION_ERROR, UNAUTHORIZED, FORBIDDEN, FEATURE_DISABLED, NOT_FOUND, CONFLICT, QUOTA_EXCEEDED, UNPROCESSABLE_ENTITY, INTERNAL_ERROR, SERVICE_UNAVAILABLE.
requestIdstring—
detailsstringAceita null.
fieldErrorsarrayAceita null.
fieldErrors[].fieldstring—
fieldErrors[].messagestring—
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.
CampoTipoDescrição
errorstring—
codestringValores: BAD_REQUEST, VALIDATION_ERROR, UNAUTHORIZED, FORBIDDEN, FEATURE_DISABLED, NOT_FOUND, CONFLICT, QUOTA_EXCEEDED, UNPROCESSABLE_ENTITY, INTERNAL_ERROR, SERVICE_UNAVAILABLE.
requestIdstring—
detailsstringAceita null.
fieldErrorsarrayAceita null.
fieldErrors[].fieldstring—
fieldErrors[].messagestring—
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.
CampoTipoDescrição
errorstring—
codestringValores: BAD_REQUEST, VALIDATION_ERROR, UNAUTHORIZED, FORBIDDEN, FEATURE_DISABLED, NOT_FOUND, CONFLICT, QUOTA_EXCEEDED, UNPROCESSABLE_ENTITY, INTERNAL_ERROR, SERVICE_UNAVAILABLE.
requestIdstring—
detailsstringAceita null.
fieldErrorsarrayAceita null.
fieldErrors[].fieldstring—
fieldErrors[].messagestring—
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"
  ]
}

Precisa de ajuda?

Encontrou um problema ou ficou com uma dúvida? Fale com a equipe pelo WhatsApp.

Chamar no WhatsApp