> ## 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.

# Adicionar uma nova assinatura

> Cria uma assinatura e uma cobranca para um cliente existente, sem tentar pagamento imediato.



## OpenAPI

````yaml /api-reference/openapi.json post /v2/subscription
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:
  /v2/subscription:
    post:
      tags:
        - Subscription
      summary: Adicionar uma nova assinatura
      description: >-
        Cria uma assinatura e uma cobranca para um cliente existente, sem tentar
        pagamento imediato.
      operationId: SubscriptionController_createV2
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateSubscriptionV2Dto'
            example:
              companyId: company_id
              productId: product_id
              clientId: client_id
              dueDate: '2026-07-23'
              paymentMethod: CREDIT_CARD
      responses:
        '201':
          description: Assinatura e cobranca criadas.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateSubscriptionV2Response'
              example:
                subscription:
                  _id: subscription_id
                  status: CREATED
                charge:
                  _id: charge_id
                  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: /v2/subscription
                metadata: {}
        '401':
          description: Credencial ausente ou invalida.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error_messages:
                  - msg: Unauthorized.
                code: unauthorized
                path: /v2/subscription
                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: /v2/subscription
                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: /v2/subscription
                metadata: {}
      security:
        - api_key: []
        - token: []
components:
  schemas:
    CreateSubscriptionV2Dto:
      type: object
      properties:
        referenceId:
          type: string
          description: Referencia externa da sua aplicacao para a assinatura.
        companyId:
          type: string
          minLength: 1
          description: ID da empresa da assinatura.
        metadata:
          type: object
          additionalProperties: {}
          description: Metadados livres para conciliacao e suporte.
        productId:
          type: string
          minLength: 1
          description: ID do produto usado na assinatura v2.
        paymentMethod:
          type: string
          enum:
            - CREDIT_CARD
            - DEBIT_CARD
            - BOLETO
            - PIX
          x-enumNames:
            - CREDIT_CARD
            - DEBIT_CARD
            - BOLETO
            - PIX
          description: Metodos de pagamento disponiveis para a assinatura.
        clientId:
          type: string
          minLength: 1
          description: ID de um cliente ja cadastrado na Veepag.
        origin:
          type: string
          enum:
            - API
            - CHECKOUT
            - IMPORTED
            - AFFILIATE
          x-enumNames:
            - API
            - CHECKOUT
            - IMPORTED
            - AFFILIATE
          default: API
          description: Origem da criacao da assinatura, quando informada.
        affiliateId:
          type: string
          description: ID do afiliado vinculado, quando houver.
        dueDate:
          oneOf:
            - type: string
            - type: number
          description: Data de vencimento usada para criar a primeira cobranca.
      required:
        - companyId
        - productId
        - clientId
        - dueDate
    CreateSubscriptionV2Response:
      type: object
      properties:
        subscription:
          $ref: '#/components/schemas/Subscription'
          description: Assinatura criada pelo endpoint v2.
        charge:
          $ref: '#/components/schemas/Charge'
          description: Cobranca criada junto com a assinatura v2.
      description: >-
        Resposta da criacao v2. Retorna assinatura e cobranca criadas, sem
        tentativa de pagamento imediato.
    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
    Subscription:
      type: object
      properties:
        _id:
          type: string
          description: ID da assinatura.
        companyId:
          type: string
          description: ID da empresa vinculada a assinatura.
        clientId:
          type: string
          description: ID do cliente assinante.
        productId:
          type: string
          description: ID do produto vinculado.
        status:
          $ref: '#/components/schemas/SubscriptionStatus'
          description: Status atual da assinatura.
        paymentMethod:
          $ref: '#/components/schemas/PaymentMethod'
          description: Metodos de pagamento disponiveis para a assinatura.
        installments:
          type: number
          description: Quantidade de parcelas configurada.
        nextCharge:
          type: string
          format: date-time
          description: Proxima data de cobranca, quando disponivel.
        origin:
          $ref: '#/components/schemas/RequestOrigin'
          description: Origem da criacao da assinatura.
        referenceId:
          type: string
          description: Referencia externa da sua aplicacao.
        metadata:
          type: object
          additionalProperties: true
          description: Metadados livres vinculados a assinatura.
        active:
          type: boolean
          description: Indica se a assinatura esta ativa.
        createdAt:
          type: string
          format: date-time
          description: Data de criacao da assinatura.
        lastUpdate:
          type: string
          format: date-time
          description: Data da ultima atualizacao da assinatura.
    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.
    ErrorMessage:
      type: object
      properties:
        msg:
          type: string
          example: Unauthorized.
        type:
          type: string
          example: field
        path:
          type: string
          example: companyId
        location:
          type: string
          example: body
    SubscriptionStatus:
      type: string
      enum:
        - ACTIVE
        - ERROR_PAYMENT
        - NO_PAYMENT_ROUTE
        - CREATED
        - PENDING_PAYMENT
        - RECOVERED
        - NO_PAYMENT
        - CANCELED_ALERT_ETHOCA
        - BLOCKED
        - CANCELED_MANUAL
        - IMPORTED
        - STANDBY
        - OVERDUE
    PaymentMethod:
      type: string
      enum:
        - CREDIT_CARD
        - DEBIT_CARD
        - BOLETO
        - PIX
    RequestOrigin:
      type: string
      enum:
        - API
        - CHECKOUT
        - IMPORTED
        - AFFILIATE
    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
  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.

````