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

# Cadastra um cartão de crédito, opcionalmente com dívida legada.

> Cartão é conta de natureza PASSIVA (Decisão A): nunca entra em bank_accounts nem no saldo consolidado da empresa. legacy_debt cobre as duas partes que NÃO se sobrepõem (RN4) — o restante avulso da fatura atual e as parcelas em aberto; o total devido é a soma das duas. Nada em legacy_debt gera Transaction nem aparece em DRE/DFC/dashboard.



## OpenAPI

````yaml /openapi/extat-openapi.json post /companies/credit-card-accounts
openapi: 3.0.0
info:
  contact:
    email: contato@cernedigital.io
    name: Cerne Digital
    url: https://cernedigital.io
  description: >-
    API REST da Extat Plataforma usada pelo painel web. Artefato OpenAPI 3.0
    para a documentação Mintlify (tags em PT-BR).
  license:
    name: Apache 2.0
    url: http://www.apache.org/licenses/LICENSE-2.0.html
  termsOfService: http://swagger.io/terms/
  title: Extat Plataforma - API REST
  version: '1.0'
servers:
  - url: https://golang-api-vgnqx.ondigitalocean.app/v1
security: []
tags:
  - name: Autenticação
  - name: Bancos
  - name: Contas Bancárias
  - name: Plano e Assinaturas
  - name: Empresa
  - name: Centros de Custo
  - name: Painel
  - name: Demonstrativos
  - name: Saúde
  - name: Convites
  - name: Membros
  - name: Onboarding
  - name: Fornecedores
  - name: Usuário
paths:
  /companies/credit-card-accounts:
    post:
      tags:
        - Empresa
      summary: Cadastra um cartão de crédito, opcionalmente com dívida legada.
      description: >-
        Cartão é conta de natureza PASSIVA (Decisão A): nunca entra em
        bank_accounts nem no saldo consolidado da empresa. legacy_debt cobre as
        duas partes que NÃO se sobrepõem (RN4) — o restante avulso da fatura
        atual e as parcelas em aberto; o total devido é a soma das duas. Nada em
        legacy_debt gera Transaction nem aparece em DRE/DFC/dashboard.
      parameters:
        - description: company uuid
          in: header
          name: x-company-id
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/credit_card.CreateCreditCardAccountRequestDTO
        description: Credit card data
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/credit_card.CreateCreditCardAccountResponseDTO
          description: Created
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/handler.ErrorResponseDTO'
          description: >-
            corpo malformado, x-company-id inválido, apelido ausente, dia fora
            de 1-31, limite <= 0, ou item de dívida legada inválido
        '409':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/handler.ErrorResponseDTO'
          description: já existe um cartão com esse apelido nesta empresa
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/handler.ErrorResponseDTO'
          description: >-
            coa_id da dívida legada não existe nesta empresa, ou não é de
            despesa
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/handler.ErrorResponseDTO'
          description: Internal Server Error
      security:
        - ApiKeyAuth: []
components:
  schemas:
    credit_card.CreateCreditCardAccountRequestDTO:
      properties:
        active:
          type: boolean
        alias:
          type: string
        closing_day:
          type: integer
        credit_limit:
          type: number
        due_day:
          type: integer
        issuer:
          type: string
        last4:
          type: string
        legacy_debt:
          $ref: '#/components/schemas/credit_card.LegacyDebtRequestDTO'
        legacy_debt_declared:
          description: >-
            LegacyDebtDeclared é a resposta EXPLÍCITA à pergunta "este cartão já
            tem

            dívida anterior?" quando a resposta é "não" (legacy_debt ausente).


            Sem este campo, um cartão novo sem nenhum item em legacy_debt fica

            indistinguível de um cadastro que simplesmente não respondeu à
            pergunta

            — a lacuna que CreditCardAccount.LegacyDebtDeclaredAt fecha (spec.md

            § "Como dívida legada informada é determinada", complemento de

            2026-09-02). Quando legacy_debt tem qualquer item, a declaração já é

            IMPLÍCITA (creditcardrepo.AccountRepository.Create trata

            len(LegacyDebt) > 0 como resposta dada) — enviar este campo true
            nesse

            caso não é erro, só redundante.
          type: boolean
      required:
        - alias
        - closing_day
        - due_day
      type: object
    credit_card.CreateCreditCardAccountResponseDTO:
      properties:
        active:
          type: boolean
        alias:
          type: string
        closing_day:
          type: integer
        created_at:
          type: string
        credit_limit:
          type: number
        due_day:
          type: integer
        id:
          type: string
        issuer:
          type: string
        last4:
          type: string
        legacy_debt_declared:
          description: >-
            LegacyDebtDeclared espelha CreditCardAccount.LegacyDebtDeclaredAt !=
            nil

            — é a RESPOSTA à pergunta sobre dívida anterior, não "existe dívida"

            (spec.md § "Como dívida legada informada é determinada"). Usada pelo

            front para decidir se available_limit nulo, na listagem, significa

            "cadastro incompleto" ou "sem dívida legada, cadastro completo".
          type: boolean
        legacy_purchases_count:
          description: >-
            LegacyPurchasesCount é quantos itens de dívida legada (RN4) entraram
            no

            cadastro — 0 quando nenhuma dívida foi informada.
          type: integer
        updated_at:
          type: string
      type: object
    handler.ErrorResponseDTO:
      properties:
        error:
          type: string
        message:
          type: string
      type: object
    credit_card.LegacyDebtRequestDTO:
      properties:
        current_invoice_remainder:
          description: >-
            CurrentInvoiceRemainder é o "restante da fatura atual, fora

            parcelamentos" (spec.md) — um valor avulso, sem contagem de
            parcelas.
          type: number
        current_invoice_remainder_coa_id:
          description: >-
            CurrentInvoiceRemainderCoaID é a categoria OPCIONAL do restante
            avulso.


            Campo IRMÃO em vez de o restante virar um objeto {amount, coa_id}: o

            corpo `current_invoice_remainder: 40.00` já está publicado e em uso,
            e

            trocá-lo por um objeto quebraria todo cliente existente para
            acrescentar

            um campo opcional. Feio é melhor que incompatível.
          type: integer
        installments:
          items:
            $ref: '#/components/schemas/credit_card.LegacyDebtInstallmentRequestDTO'
          type: array
      type: object
    credit_card.LegacyDebtInstallmentRequestDTO:
      properties:
        amount:
          type: number
        coa_id:
          type: integer
        reference:
          type: string
        remaining:
          type: integer
      required:
        - amount
        - reference
        - remaining
      type: object
  securitySchemes:
    ApiKeyAuth:
      description: >-
        Token da sessão no cabeçalho Authorization, no formato Bearer (mesmo
        esquema ApiKeyAuth do contrato).
      in: header
      name: Authorization
      type: apiKey

````