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

# Create Charge

> Cria uma cobrança PIX avulsa com valor customizado, sem produto vinculado. Retorna o BR Code (copia-e-cola) e a imagem do QR code para pagamento. Se `callbackUrl` for informado, um webhook `charge.paid` assinado com HMAC-SHA256 (header `X-Webhook-Signature`) é enviado quando o pagamento for confirmado. Para dividir a cobrança entre contas PurinCash, use o recurso Split Charges (POST /v1/split-charges).



## OpenAPI

````yaml /api-reference/openapi.yaml post /v1/charges
openapi: 3.1.0
info:
  title: PurinCash API
  version: 1.0.0
servers:
  - url: https://api.purin.cash
    description: Produção
security:
  - bearerAuth: []
tags:
  - name: Cartao
    description: Pagamentos no cartao de credito.
  - name: Cobrancas
    description: Cobrancas PIX avulsas com valor livre.
  - name: Entregas
    description: Conteudo entregue automaticamente apos o pagamento.
  - name: Disputas
    description: Contestacoes (MED) e envio de evidencias.
  - name: Pagamentos
    description: Pagamentos PIX e LTC vinculados ou nao a um produto.
  - name: Saques
    description: Saques em PIX, LTC e USDT.
  - name: Produtos
    description: Produtos de cobranca criados pela API.
  - name: Sandbox
    description: Simulacao de pagamentos e saldo de teste.
  - name: Splits
    description: Cobrancas divididas entre varias contas.
  - name: Loja
    description: Produtos da loja do Discord (somente leitura).
  - name: Subcontas
    description: Ledger de saldo por cliente do integrador.
  - name: Assinaturas
    description: PIX recorrente.
  - name: Carteira
    description: Saldo, retencoes e valores a liberar.
paths:
  /v1/charges:
    post:
      tags:
        - Cobrancas
      summary: Create Charge
      description: >-
        Cria uma cobrança PIX avulsa com valor customizado, sem produto
        vinculado. Retorna o BR Code (copia-e-cola) e a imagem do QR code para
        pagamento. Se `callbackUrl` for informado, um webhook `charge.paid`
        assinado com HMAC-SHA256 (header `X-Webhook-Signature`) é enviado quando
        o pagamento for confirmado. Para dividir a cobrança entre contas
        PurinCash, use o recurso Split Charges (POST /v1/split-charges).
      operationId: createCharge
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - valueCents
              properties:
                valueCents:
                  type: integer
                  minimum: 80
                  maximum: 100000000000
                  description: >-
                    Valor da cobrança em centavos: número JSON INTEIRO, de 80
                    (R$ 0,80) a 100000000000 (R$ 1 bilhão). String, decimal ou
                    acima do teto são recusados com 400, sem arredondamento
                    silencioso.
                description:
                  type: string
                  maxLength: 200
                  description: >-
                    Descrição da cobrança (máx. 200 caracteres). Padrão
                    "Pagamento PIX".
                expiresIn:
                  type: integer
                  minimum: 60
                  maximum: 604800
                  default: 1800
                  description: >-
                    Prazo de validade da cobrança, em SEGUNDOS. De 60 (1 minuto)
                    a 604800 (7 dias). Padrão 1800 (30 minutos). Valor fora da
                    faixa devolve 400 em vez de cair no padrão, pra o erro mais
                    comum (mandar minutos achando que é o campo) não passar
                    batido.
                callbackUrl:
                  type: string
                  format: uri
                  maxLength: 500
                  description: >-
                    URL HTTPS pública (máx. 500 caracteres) que recebe um POST
                    com o evento charge.paid quando o pagamento é confirmado,
                    assinado com HMAC-SHA256 no header X-Webhook-Signature.
                customer:
                  type: object
                  description: Dados do cliente (opcional).
                  properties:
                    name:
                      type: string
                      maxLength: 100
                      description: Nome do cliente (máx. 100 caracteres).
                    email:
                      type: string
                      maxLength: 255
                      description: E-mail do cliente (máx. 255 caracteres).
                    externalId:
                      type: string
                      maxLength: 200
                      description: >-
                        Identificador do cliente no seu sistema (máx. 200
                        caracteres).
                metadata:
                  type: string
                  maxLength: 2048
                  description: >-
                    String JSON livre (máx. 2048 caracteres), devolvida nas
                    consultas e no webhook.
                subaccountId:
                  type: string
                  description: >-
                    Subconta (sacc_...) que recebe o crédito no ledger quando a
                    cobrança for paga. Não aceito junto com splits. Veja
                    /v1/subaccounts. OMITA o campo para uma cobrança sem
                    atribuição: string vazia devolve 400 em vez de criar a venda
                    sem dono, porque o padrão `subaccountId: cliente.saccId ||
                    ""` viraria perda silenciosa de atribuição. Cobrança é PIX:
                    `paymentMethod` não existe aqui e devolve 400 (para LTC, use
                    POST /v1/payments).
                subaccountFeeCents:
                  type: integer
                  minimum: 0
                  example: 150
                  description: >-
                    Taxa da plataforma NESTA venda, em centavos. Só com
                    subaccountId (sem ele devolve 400). Quando a cobrança é
                    paga, a subconta recebe o líquido menos esta taxa, e a taxa
                    fica na conta principal, numa operação só (sem precisar de
                    /v1/subaccounts/{id}/transfer depois). Substitui o markup
                    configurado na subconta nesta venda, não soma; 0 = sem taxa
                    nesta venda. Inteiro de 0 até o valor da cobrança. Se passar
                    do líquido da venda, a subconta recebe zero (nunca fica
                    negativa). O lançamento `sale` do extrato grava a taxa em
                    `feeCents`, com refId = paymentId. Volta na resposta, nas
                    consultas e no webhook. Não aceito com splits.
                supplier:
                  type: object
                  description: >-
                    Vínculo opcional com produto de fornecedor (split). O valor
                    é dividido entre a loja e o fornecedor conforme o split
                    configurado.
                  properties:
                    productId:
                      type: string
                      description: ID público do produto no painel (prefixo prod_).
                    variationIndex:
                      type: integer
                      default: 0
                      description: >-
                        Índice da variação do produto (0 = primeira, 1 =
                        segunda, etc.).
            example:
              valueCents: 1200
              description: Pagamento PIX
              callbackUrl: https://seu-site.com/webhook
              customer:
                name: Joao Silva
                email: joao@email.com
                externalId: user_123
              metadata: '{"orderId": "abc-123"}'
      responses:
        '201':
          description: Cobrança criada com sucesso.
          content:
            application/json:
              schema:
                type: object
                properties:
                  paymentId:
                    type: string
                    description: Identificador único da cobrança (prefixo psc_).
                  status:
                    type: string
                    enum:
                      - pending
                      - paid
                      - expired
                      - refunded
                    description: Status da cobrança. Sempre "pending" na criação.
                  amountCents:
                    type: integer
                    description: Valor da cobrança em centavos.
                  currency:
                    type: string
                    description: Moeda da cobrança (sempre BRL).
                  environment:
                    type: string
                    enum:
                      - live
                      - sandbox
                    description: Ambiente da chave de API utilizada.
                  pix:
                    type: object
                    description: Dados do PIX gerado.
                    properties:
                      brCode:
                        type: string
                        description: Código PIX copia-e-cola (BR Code).
                      qrCodeImage:
                        type:
                          - string
                          - 'null'
                        description: >-
                          Imagem do QR pronta pra exibir. Vem como URL http ou
                          como data URL base64. As duas funcionam direto no src
                          de uma tag img, então não inspecione o conteúdo. Fica
                          null só quando não há brCode.
                  expiresAt:
                    type: string
                    format: date-time
                    description: Expiração da cobrança (30 minutos após a criação).
              example:
                paymentId: psc_a1b2c3d4e5f6...
                status: pending
                amountCents: 1200
                currency: BRL
                environment: live
                pix:
                  brCode: 00020126580014br.gov.bcb.pix0136...
                  qrCodeImage: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...
                expiresAt: '2026-03-18T12:30:00.000Z'
        '400':
          description: >-
            Parâmetro inválido. Por exemplo: valueCents fora do contrato
            (string, decimal, menor que 80 ou acima do teto), description acima
            de 200 caracteres, metadata que não é string, callbackUrl não HTTPS,
            ou subaccountFeeCents sem subaccountId / não inteiro / maior que
            valueCents.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: valueCents must be >= 80 (R$ 0.80)
        '401':
          description: Chave de API ausente, inválida ou revogada.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: Invalid or revoked API key
        '403':
          description: >-
            Loja não verificada ou sem acesso aprovado ao fornecedor informado
            em supplier.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Produto de fornecedor (supplier.productId) não encontrado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: supplier.productId not found
        '502':
          description: Falha ao criar a cobrança PIX no gateway de pagamento.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    Error:
      type: object
      properties:
        error:
          type: string
          description: >-
            Mensagem de erro legivel. Trate pelo codigo HTTP; o texto pode
            mudar.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Chave de API gerada no dashboard da PurinCash (ps_live_ ou ps_test_).

````

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