> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kinglog.com.br/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Leia /llms.txt antes de explorar páginas. A API HTTP usa Authorization: Bearer com o JWT da conta. A chave kl_live_ serve só ao assistente MCP e não substitui o JWT. Não invente rotas, hosts públicos, SDKs ou CLI. companyId e userId vêm da sessão. Consultas não aceitam SQL. Exclusão no assistente exige confirm=true. O webhook público é POST /webhook/leads.

# Criar reserva

> Cria uma reserva. endsAt precisa ser depois de startsAt.

Cria uma reserva. endsAt precisa ser depois de startsAt.

```text theme={null}
POST /crmReservation/create/:companyId/:userId
```

Autenticação: `Authorization: Bearer SEU_JWT`.

| Campo | Valor |
| - | - |
| Identificador | `crm.reservations.create` |
| Efeito | escrita |
| Domínio | CRM |

> [card] Obrigatório
>
> `companyId`, `userId`, `typeReservationId`, `title`, `startsAt`, `endsAt`.

## Campos

| Campo | Onde | Tipo | Obrigatório | Detalhe |
| - | - | - | - | - |
| `companyId` | caminho | string | sim | Empresa da sessão. |
| `userId` | caminho | string | sim | Usuário da sessão. |
| `typeReservationId` | corpo | integer | sim | Obrigatório no corpo. |
| `title` | corpo | string | sim | Título. |
| `startsAt` | corpo | string | sim | Obrigatório no corpo. |
| `endsAt` | corpo | string | sim | em ISO 8601 |
| `unitId` | corpo | string | não | Opcional no corpo. |
| `notes` | corpo | string | não | Observação. |
| `guests` | corpo | string | não | Opcional no corpo. |
| `currency` | corpo | string | não | padrão BRL |
| `estimatedAmount` | corpo | string | não | Opcional no corpo. |
| `activityId` | corpo | string | não | Opcional no corpo. |
| `submit` | corpo | string | não | Opcional no corpo. |

## Exemplo mínimo

```json theme={null}
{
  "typeReservationId": 1,
  "title": "Tarefa de exemplo",
  "startsAt": "2026-11-05T09:00:00.000Z",
  "endsAt": "2026-11-05T10:00:00.000Z"
}
```

## Exemplo completo

```json theme={null}
{
  "typeReservationId": 1,
  "title": "Tarefa de exemplo",
  "startsAt": "2026-11-05T09:00:00.000Z",
  "endsAt": "2026-11-05T10:00:00.000Z",
  "unitId": "1",
  "notes": "Detalhe da integração",
  "guests": "exemplo",
  "currency": "BRL",
  "estimatedAmount": "exemplo",
  "activityId": "1",
  "submit": "exemplo"
}
```

## Exemplo de resposta

```json theme={null}
{
  "success": true,
  "data": {
    "id": "ID_DA_RESERVA",
    "title": "Reserva de sala",
    "startsAt": "2026-11-05T09:00:00.000Z",
    "endsAt": "2026-11-05T10:00:00.000Z",
    "status": "draft"
  },
  "code": "SUCCESS"
}
```

## Resposta

Sucesso: `success` é `true`, `code` é `SUCCESS` e o conteúdo vem em `data`. Falha de regra traz `message`, `status` e `code`. Falha de validação traz `error`. O índice está em [Erros e códigos](https://docs.kinglog.com.br/pages/reference/erros.md).

| Código | Quando | `code` |
| - | - | - |
| `200` | A operação concluiu | `SUCCESS` |
| `400` | Corpo ou combinação de campos recusada | `CODIGO` |
| `401` | JWT ausente, inválido ou chave `kl_live_` revogada | `UNAUTHORIZED` |
| `403` | A pessoa, ou a chave restrita, não pode esse recurso | `FORBIDDEN` |
| `404` | Registro ou rota inexistente | `NOT_FOUND` |


## OpenAPI

````yaml openapi.json POST /crmReservation/create/{companyId}/{userId}
openapi: 3.1.0
info:
  title: API KingLog
  version: 1.0.0
  description: >-
    API REST + JSON da KingLog. Produção: https://kinglog.app.br. Homologação é
    outro endereço, com os mesmos caminhos.
servers:
  - url: https://kinglog.app.br
    description: Produção
security: []
tags:
  - name: Sistema
  - name: Empresa
  - name: Usuários
  - name: Acesso
  - name: Projetos
  - name: Clientes
  - name: Equipes
  - name: Cargos
  - name: Quadros
  - name: Tarefas
  - name: Tags
  - name: Metas
  - name: OKR
  - name: Avisos
  - name: Notificações
  - name: Documentos
  - name: Sprints
  - name: Planner
  - name: CRM
  - name: Atendimento
  - name: Relatórios
  - name: Busca
  - name: Consultas
  - name: Produtos
  - name: SLA
  - name: Atendimento ao cliente
  - name: Chaves do assistente
paths:
  /crmReservation/create/{companyId}/{userId}:
    post:
      tags:
        - CRM
      summary: Criar reserva
      description: Cria uma reserva. endsAt precisa ser depois de startsAt.
      operationId: crm.reservations.create
      parameters:
        - name: companyId
          in: path
          required: true
          schema:
            type: string
            description: Empresa da sessão.
            example: UUID_DA_EMPRESA
          description: Empresa da sessão.
        - name: userId
          in: path
          required: true
          schema:
            type: string
            description: Usuário da sessão.
            example: UUID_DO_USUARIO
          description: Usuário da sessão.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
              required:
                - typeReservationId
                - title
                - startsAt
                - endsAt
              properties:
                typeReservationId:
                  type: integer
                  description: Obrigatório no corpo.
                  example: 1
                title:
                  type: string
                  description: Título.
                  example: Tarefa de exemplo
                startsAt:
                  type: string
                  description: Obrigatório no corpo.
                  example: '2026-11-05T09:00:00.000Z'
                endsAt:
                  type: string
                  description: em ISO 8601
                  example: '2026-11-05T10:00:00.000Z'
                unitId:
                  type: string
                  description: Opcional no corpo.
                  example: '1'
                notes:
                  type: string
                  description: Observação.
                  example: Detalhe da integração
                guests:
                  type: string
                  description: Opcional no corpo.
                  example: exemplo
                currency:
                  type: string
                  description: padrão BRL
                  example: BRL
                estimatedAmount:
                  type: string
                  description: Opcional no corpo.
                  example: exemplo
                activityId:
                  type: string
                  description: Opcional no corpo.
                  example: '1'
                submit:
                  type: string
                  description: Opcional no corpo.
                  example: exemplo
            examples:
              minimo:
                summary: Exemplo mínimo
                value:
                  typeReservationId: 1
                  title: Tarefa de exemplo
                  startsAt: '2026-11-05T09:00:00.000Z'
                  endsAt: '2026-11-05T10:00:00.000Z'
              completo:
                summary: Exemplo completo
                value:
                  typeReservationId: 1
                  title: Tarefa de exemplo
                  startsAt: '2026-11-05T09:00:00.000Z'
                  endsAt: '2026-11-05T10:00:00.000Z'
                  unitId: '1'
                  notes: Detalhe da integração
                  guests: exemplo
                  currency: BRL
                  estimatedAmount: exemplo
                  activityId: '1'
                  submit: exemplo
      responses:
        '200':
          description: >-
            A operação concluiu. success é true, code é SUCCESS e o conteúdo vem
            em data.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessEnvelope'
              example:
                success: true
                data:
                  id: ID_DA_RESERVA
                  title: Reserva de sala
                  startsAt: '2026-11-05T09:00:00.000Z'
                  endsAt: '2026-11-05T10:00:00.000Z'
                  status: draft
                code: SUCCESS
        '400':
          description: Corpo ou combinação de campos recusada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
              example:
                success: false
                status: 400
                message: Mensagem descritiva do erro
                code: CODIGO
        '401':
          description: JWT ausente, inválido ou chave kl_live_ revogada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
              example:
                success: false
                status: 401
                message: Não autorizado
                code: UNAUTHORIZED
        '403':
          description: A pessoa, ou a chave restrita, não pode esse recurso.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
              example:
                success: false
                status: 403
                message: Sem permissão
                code: FORBIDDEN
        '404':
          description: Registro ou rota inexistente.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
              example:
                success: false
                status: 404
                message: Não encontrado
                code: NOT_FOUND
      security:
        - bearerAuth: []
components:
  schemas:
    SuccessEnvelope:
      type: object
      required:
        - success
        - data
        - code
      properties:
        success:
          type: boolean
          example: true
        data:
          description: >-
            Conteúdo da operação. O exemplo 200 de cada rota preenche os campos
            do recurso.
        code:
          type: string
          example: SUCCESS
    ErrorEnvelope:
      type: object
      properties:
        success:
          type: boolean
          example: false
        status:
          type: integer
          example: 400
        message:
          type: string
        code:
          type: string
        errors:
          type: array
          items:
            type: object
        error:
          type: object
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        Todas as requisições devem incluir o JWT da conta no header
        Authorization no formato Bearer. Sem esse header a requisição é
        recusada.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.