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

# Criar produto

> Cria um produto, já pronto para vender. O `status` é gerido pela plataforma e é **somente leitura**: não pode ser enviado nem alterado pela API. Use `is_active` (padrão `true`) para criar o produto já ativo ou inativo. Escopo: `products:write`. Exige `Idempotency-Key`.



## OpenAPI

````yaml /api-reference/openapi.json post /api/v2/products
openapi: 3.0.3
info:
  title: Ticto API v2
  version: 2.0.0
  description: >-
    API pública da Ticto para criar produtos e ofertas e ler pedidos,
    assinaturas e saques. Autenticação por token Bearer com escopos granulares.
    Todo acesso é isolado ao produtor dono do token — por construção, não por
    checagem por endpoint.
servers:
  - url: https://api.ticto.cloud
    description: Produção (tokens ticto_live_)
  - url: https://sandbox.ticto.cloud
    description: Sandbox (tokens ticto_test_)
security:
  - bearerAuth: []
tags:
  - name: Produtos
    description: Criação e leitura de produtos.
  - name: Ofertas
    description: Criação e leitura de ofertas de um produto.
  - name: Pedidos
    description: Leitura de pedidos (paridade com a API v1).
  - name: Assinaturas
    description: Leitura de assinaturas (paridade com a API v1).
  - name: Saques
    description: Leitura de saques/cashouts (paridade com a API v1).
paths:
  /api/v2/products:
    post:
      tags:
        - Produtos
      summary: Criar produto
      description: >-
        Cria um produto, já pronto para vender. O `status` é gerido pela
        plataforma e é **somente leitura**: não pode ser enviado nem alterado
        pela API. Use `is_active` (padrão `true`) para criar o produto já ativo
        ou inativo. Escopo: `products:write`. Exige `Idempotency-Key`.
      operationId: createProduct
      parameters:
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateProduct'
            example:
              name: Curso de Marketing Digital
              type: course
              description: Curso completo de marketing digital do zero ao avançado.
              category: Marketing
      responses:
        '201':
          description: Produto criado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Product'
        '400':
          $ref: '#/components/responses/IdempotencyRequired'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
      security:
        - bearerAuth:
            - products:write
components:
  parameters:
    IdempotencyKey:
      name: Idempotency-Key
      in: header
      required: true
      schema:
        type: string
        format: uuid
      description: >-
        UUID v4 único por operação. Garante que retries não criem recursos
        duplicados.
  schemas:
    CreateProduct:
      type: object
      required:
        - name
        - type
        - description
      properties:
        name:
          type: string
          maxLength: 255
          description: Nome do produto.
        type:
          type: string
          enum:
            - course
            - ebook
            - consultancy
            - mentoring
            - artificial_intelligence
            - other
          description: >-
            Tipo do produto (apenas digitais na v2). Recorrência é definida na
            oferta (`charge_type: recurring`), não no tipo.
        description:
          type: string
          minLength: 3
          maxLength: 1000
        category:
          type: string
          maxLength: 120
          description: Categoria (opcional).
        is_active:
          type: boolean
          default: true
          description: >-
            Define se o produto nasce ativo (disponível) ou inativo. Opcional;
            padrão `true`.
    Product:
      type: object
      properties:
        object:
          type: string
          example: product
        id:
          type: string
          description: Hash do produto — identificador canônico da API.
          example: PABC123
        reference_id:
          type: integer
          description: >-
            ID numérico legado (reconcilia com a dashboard). Não é fronteira de
            segurança.
          example: 42
        name:
          type: string
          example: Curso de Marketing Digital
        type:
          type: string
          example: course
        status:
          type: string
          readOnly: true
          example: approved
          description: >-
            Status do produto, gerido pela plataforma. Somente leitura: não pode
            ser enviado nem alterado pela API.
        is_active:
          type: boolean
          example: true
          description: >-
            Se o produto está ativo (disponível). Controlado pelo produtor via
            `is_active` na criação.
        created_at:
          type: string
          format: date-time
    Error:
      type: object
      properties:
        error:
          type: string
          example: insufficient_scope
        message:
          type: string
          example: 'Token is missing the required ability: orders:read.'
        request_id:
          type: string
          nullable: true
    ValidationErrorBody:
      type: object
      properties:
        error:
          type: string
          example: validation_failed
        message:
          type: string
          example: The request payload is invalid.
        request_id:
          type: string
          nullable: true
        details:
          type: array
          items:
            type: string
          example:
            - The name field is required.
  responses:
    IdempotencyRequired:
      description: Operação de escrita sem o header `Idempotency-Key`.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: idempotency_key_required
            message: POST requests must include an Idempotency-Key header.
            request_id: null
    Unauthorized:
      description: Token ausente, inválido ou expirado.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: unauthorized
            message: Invalid or expired token.
            request_id: null
    Forbidden:
      description: O token não tem o escopo exigido.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: insufficient_scope
            message: 'Token is missing the required ability: orders:read.'
            request_id: null
    ValidationError:
      description: Payload inválido.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ValidationErrorBody'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Token opaco no formato `ticto_live_...` (produção) ou `ticto_test_...`
        (sandbox). Enviado como `Authorization: Bearer <token>`.

````

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