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

# Create a new charge

> Cria uma cobranca para um cliente e produto. O amount e convertido para centavos internamente.



## OpenAPI

````yaml /api-reference/openapi.json post /v1/charge
openapi: 3.1.1
info:
  title: Veepag API
  description: >-
    API publica da Veepag para transacoes, clientes, assinaturas, produtos,
    cobrancas e alertas.


    Autentique as chamadas com o header `apiKey` no formato `keyId.secret` ou
    com o header `token` contendo um JWT valido.

    Use o ambiente de sandbox para testes e producao apenas depois da
    homologacao.
  version: 1.0.0
  contact: {}
servers:
  - url: https://sandbox.api.veepag.com
    description: Sandbox
  - url: https://api.veepag.com
    description: Produção
security:
  - api_key: []
  - token: []
tags:
  - name: Transaction
    description: >-
      Pagamentos avulsos, captura, cancelamento, consulta e exportacao de
      transacoes.
  - name: Client
    description: Cadastro, atualizacao e consulta de clientes.
  - name: Subscription
    description: Criacao, consulta, atualizacao e cancelamento de assinaturas.
  - name: Product
    description: Configuracao de produtos, precos e regras de cobranca.
  - name: Charge
    description: Criacao, pagamento, cancelamento e conciliacao de cobrancas.
  - name: Alert
    description: Consulta e tratamento de alertas Ethoca/Visa.
paths:
  /v1/charge:
    post:
      tags:
        - Charge
      summary: Create a new charge
      description: >-
        Cria uma cobranca para um cliente e produto. O amount e convertido para
        centavos internamente.
      operationId: ChargeController_createCharge
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateChargeDto'
            example:
              companyId: company_id
              clientId: client_id
              productId: product_id
              dueDate: '2026-07-23'
              amount: 99.9
              description: Mensalidade julho
      responses:
        '201':
          description: Cobranca criada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Charge'
              example:
                _id: charge_id
                companyId: company_id
                amount: 9990
                status: ACTIVE
        '400':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error_messages:
                  - msg: Payload invalido.
                    type: field
                    path: companyId
                    location: body
                code: ZodValidationException
                path: /v1/charge
                metadata: {}
        '401':
          description: Credencial ausente ou invalida.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error_messages:
                  - msg: Unauthorized.
                code: unauthorized
                path: /v1/charge
                metadata: {}
        '403':
          description: Credencial sem acesso ao recurso ou empresa solicitada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error_messages:
                  - msg: Forbidden.
                code: forbidden
                path: /v1/charge
                metadata: {}
        '500':
          description: Erro interno nao mapeado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error_messages:
                  - msg: Unknown server error.
                code: unknown_server_error
                path: /v1/charge
                metadata: {}
      security:
        - api_key: []
        - token: []
components:
  schemas:
    CreateChargeDto:
      type: object
      properties:
        companyId:
          type: string
          description: ID da empresa da cobranca.
        clientId:
          type: string
          description: ID do cliente que recebera a cobranca.
        productId:
          type: string
          description: ID do produto vinculado a cobranca.
        paymentMethodOption:
          type: array
          items:
            type: object
            properties:
              type:
                type: string
                enum:
                  - CREDIT_CARD
                  - DEBIT_CARD
                  - BOLETO
                  - PIX
                x-enumNames:
                  - CREDIT_CARD
                  - DEBIT_CARD
                  - BOLETO
                  - PIX
              active:
                type: boolean
              installments:
                type: array
                items:
                  type: object
                  properties:
                    installment:
                      type: number
                    totalAmount:
                      type: number
                    installmentAmount:
                      type: number
                    fee:
                      type: number
                  required:
                    - installment
            required:
              - type
          default: []
          description: Opcoes de pagamento disponiveis para a cobranca.
        dueDate:
          description: Data de vencimento da cobranca.
        amount:
          type: number
          exclusiveMinimum: 0
          description: >-
            Valor decimal da cobranca. O backend converte internamente para
            centavos com Math.round(amount * 100).
        description:
          type: string
          description: Descricao da cobranca.
        cardAuth:
          type:
            - boolean
            - 'null'
          description: Indica uso de autorizacao de cartao, quando aplicavel.
      required:
        - companyId
        - clientId
        - productId
        - dueDate
        - amount
    Charge:
      type: object
      properties:
        _id:
          type: string
          description: ID da cobranca.
        companyId:
          type: string
          description: ID da empresa vinculada a cobranca.
        clientId:
          type: string
          description: ID do cliente vinculado.
        productId:
          type: string
          description: ID do produto vinculado.
        subscriptionId:
          type: string
          description: ID da assinatura vinculada, quando houver.
        amount:
          type: number
          description: Valor da cobranca, normalmente com value em centavos e currency BRL.
        dueDate:
          oneOf:
            - type: string
            - type: number
          description: Data de vencimento da cobranca.
        description:
          type: string
          description: Descricao da cobranca.
        status:
          $ref: '#/components/schemas/ChargeStatus'
          description: Status atual da cobranca.
        paymentMethod:
          $ref: '#/components/schemas/PaymentMethod'
          description: Metodos de pagamento disponiveis.
        paymentMethodOption:
          type: array
          items:
            type: object
            additionalProperties: true
          description: Opcoes de pagamento da cobranca.
        active:
          type: boolean
          description: Indica se a cobranca esta ativa.
        number:
          type: number
          description: Numero sequencial da cobranca, quando houver.
        createdAt:
          type: string
          format: date-time
          description: Data de criacao da cobranca.
        lastUpdate:
          type: string
          format: date-time
          description: Data da ultima atualizacao da cobranca.
    ErrorResponse:
      type: object
      properties:
        error_messages:
          type: array
          items:
            $ref: '#/components/schemas/ErrorMessage'
        code:
          type: string
          example: unauthorized
        path:
          type: string
          example: /v1/transaction
        metadata:
          type: object
          additionalProperties: true
    ChargeStatus:
      type: string
      enum:
        - PAID
        - ACTIVE
        - ANTICIPATED
        - CANCELED
        - CANCELED_ALERT_ETHOCA
        - PENDING_PAYMENT
        - IMPORTED
        - ERROR_PAYMENT
        - ERROR_REFUNDED
        - OVERDUE
        - NO_PAYMENT_ROUTE
        - RECOVERED
        - BLOCKED
        - NO_PAYMENT
        - CANCELED_MANUAL
        - DISPUTE
        - CHARGEBACK
        - STANDBY
        - DISABLED
    PaymentMethod:
      type: string
      enum:
        - CREDIT_CARD
        - DEBIT_CARD
        - BOLETO
        - PIX
    ErrorMessage:
      type: object
      properties:
        msg:
          type: string
          example: Unauthorized.
        type:
          type: string
          example: field
        path:
          type: string
          example: companyId
        location:
          type: string
          example: body
  securitySchemes:
    api_key:
      type: apiKey
      in: header
      name: apiKey
      description: API key no formato keyId.secret.
    token:
      type: apiKey
      in: header
      name: token
      description: JWT valido. O token confirmado na codebase tem validade de 14 dias.

````