> ## 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 produto do CRM

> Cadastra um produto no catálogo comercial.

Cadastra um produto no catálogo comercial.

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

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

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

> [card] Obrigatório
>
> `companyId`, `userId`, `name`.

## Campos

| Campo | Onde | Tipo | Obrigatório | Detalhe |
| - | - | - | - | - |
| `companyId` | caminho | string | sim | Empresa da sessão. |
| `userId` | caminho | string | sim | Usuário da sessão. |
| `code` | corpo | string | não | Opcional no corpo. |
| `description` | corpo | string | não | Texto descritivo. |
| `unit` | corpo | string | não | Opcional no corpo. |
| `unit_price` | corpo | string | não | Opcional no corpo. |
| `currency` | corpo | string | não | 3 letras, padrão BRL |
| `tax_percent` | corpo | string | não | Opcional no corpo. |
| `cost_price` | corpo | string | não | Opcional no corpo. |
| `stock_quantity` | corpo | string | não | Opcional no corpo. |
| `allow_negative_stock` | corpo | string | não | Opcional no corpo. |
| `barcode` | corpo | string | não | Opcional no corpo. |
| `category` | corpo | string | não | Opcional no corpo. |
| `owner_user_id` | corpo | string | não | Opcional no corpo. |
| `name` | corpo | string | sim | Nome. |

## Exemplo mínimo

```json theme={null}
{
  "name": "Ana Lima"
}
```

## Exemplo completo

```json theme={null}
{
  "code": "exemplo",
  "description": "Detalhe da integração",
  "unit": "exemplo",
  "unit_price": "exemplo",
  "currency": "BRL",
  "tax_percent": "exemplo",
  "cost_price": "exemplo",
  "stock_quantity": "exemplo",
  "allow_negative_stock": "exemplo",
  "barcode": "exemplo",
  "category": "exemplo",
  "owner_user_id": "exemplo",
  "name": "Ana Lima"
}
```

## Exemplo de resposta

```json theme={null}
{
  "success": true,
  "data": {},
  "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 /crmProduct/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:
  /crmProduct/create/{companyId}/{userId}:
    post:
      tags:
        - CRM
      summary: Criar produto do CRM
      description: Cadastra um produto no catálogo comercial.
      operationId: crm.products.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:
                - name
              properties:
                code:
                  type: string
                  description: Opcional no corpo.
                  example: exemplo
                description:
                  type: string
                  description: Texto descritivo.
                  example: Detalhe da integração
                unit:
                  type: string
                  description: Opcional no corpo.
                  example: exemplo
                unit_price:
                  type: string
                  description: Opcional no corpo.
                  example: exemplo
                currency:
                  type: string
                  description: 3 letras, padrão BRL
                  example: BRL
                tax_percent:
                  type: string
                  description: Opcional no corpo.
                  example: exemplo
                cost_price:
                  type: string
                  description: Opcional no corpo.
                  example: exemplo
                stock_quantity:
                  type: string
                  description: Opcional no corpo.
                  example: exemplo
                allow_negative_stock:
                  type: string
                  description: Opcional no corpo.
                  example: exemplo
                barcode:
                  type: string
                  description: Opcional no corpo.
                  example: exemplo
                category:
                  type: string
                  description: Opcional no corpo.
                  example: exemplo
                owner_user_id:
                  type: string
                  description: Opcional no corpo.
                  example: exemplo
                name:
                  type: string
                  description: Nome.
                  example: Ana Lima
            examples:
              minimo:
                summary: Exemplo mínimo
                value:
                  name: Ana Lima
              completo:
                summary: Exemplo completo
                value:
                  code: exemplo
                  description: Detalhe da integração
                  unit: exemplo
                  unit_price: exemplo
                  currency: BRL
                  tax_percent: exemplo
                  cost_price: exemplo
                  stock_quantity: exemplo
                  allow_negative_stock: exemplo
                  barcode: exemplo
                  category: exemplo
                  owner_user_id: exemplo
                  name: Ana Lima
      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: {}
                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.