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

# Criar uma cobrança

> Cria uma cobrança Pix e retorna o QR Code e o Pix Copia e Cola. Exige o escopo `pix:write`.

<Note>
  Exige uma chave de API com o escopo `pix:write`. Veja como criar uma em [Autenticação](/api/autenticacao).
</Note>

<Warning>
  O cabeçalho `Idempotency-Key` é obrigatório. Reenviar a mesma chave com o mesmo corpo retorna a cobrança já criada, sem duplicar; reenviar com um corpo diferente retorna `409 IDEMPOTENCY_KEY_REUSED`.
</Warning>

<Tip>
  Em vez de ficar consultando o status manualmente, configure um [webhook](/api/webhooks) para ser avisado no instante em que a cobrança for paga.
</Tip>


## OpenAPI

````yaml POST /v1/public/pix/charges
openapi: 3.1.0
info:
  title: ZynPay Public API
  version: '1.0'
  description: >
    API pública da ZynPay para gerar cobranças Pix e consultar saldo com uma
    chave de API.

    Todo valor monetário é um inteiro em centavos (R$ 10,00 = `1000`).
  license:
    name: Proprietary
servers:
  - url: https://api.zynpay.com.br
security:
  - apiKeyAuth: []
tags:
  - name: Cobranças
    description: Criar e consultar cobranças Pix
  - name: Saldo
    description: Consultar o saldo da conta
paths:
  /v1/public/pix/charges:
    post:
      tags:
        - Cobranças
      summary: Criar cobrança Pix
      description: >-
        Cria uma cobrança Pix e retorna o QR Code e o Pix Copia e Cola. Exige o
        escopo `pix:write`.
      operationId: createCharge
      parameters:
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePixChargeRequest'
      responses:
        '201':
          description: Cobrança criada
          content:
            application/json:
              schema:
                type: object
                properties:
                  charge:
                    $ref: '#/components/schemas/PixCharge'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '409':
          $ref: '#/components/responses/Conflict'
        '422':
          $ref: '#/components/responses/ValidationError'
components:
  parameters:
    IdempotencyKey:
      in: header
      name: Idempotency-Key
      required: true
      description: >-
        Identificador único seu para essa cobrança. Reenviar a mesma chave com o
        mesmo corpo retorna a cobrança já criada; com um corpo diferente retorna
        `409`.
      schema:
        type: string
        minLength: 1
        maxLength: 255
  schemas:
    CreatePixChargeRequest:
      type: object
      required:
        - amountCents
      properties:
        amountCents:
          type: integer
          minimum: 80
          maximum: 9000000000000
          description: Valor da cobrança em centavos.
          example: 5000
        description:
          type: string
          minLength: 1
          maxLength: 255
          description: Texto exibido para o pagador na tela de checkout.
          example: 'Pedido #8421'
        externalReference:
          type: string
          minLength: 1
          maxLength: 255
          description: Identificador do seu próprio sistema.
          example: '8421'
        expiresInSeconds:
          type: integer
          minimum: 60
          maximum: 604800
          description: >-
            Tempo até a cobrança expirar, em segundos. Se omitido, o provedor
            Pix define um prazo padrão.
          example: 1800
        customer:
          type: object
          properties:
            name:
              type: string
              minLength: 2
              maxLength: 160
              example: Maria Silva
            email:
              type: string
              format: email
              maxLength: 320
              example: maria@cliente.com
            externalId:
              type: string
              maxLength: 255
    PixCharge:
      type: object
      required:
        - id
        - merchantId
        - status
        - amountCents
        - feeCents
        - netAmountCents
        - provider
        - createdAt
      properties:
        id:
          type: string
          format: uuid
          description: ID único da cobrança na ZynPay.
        merchantId:
          type: string
          format: uuid
        status:
          type: string
          enum:
            - created
            - pending
            - paid
            - expired
            - cancelled
            - failed
            - refunded
          description: Veja o ciclo de vida completo em /cobrancas/ciclo-de-vida.
        origin:
          type: string
          enum:
            - public_api
            - dashboard
            - wallet_deposit
          description: Como a cobrança foi criada.
        amountCents:
          type: integer
          description: Valor bruto da cobrança
          em centavos.: null
        feeCents:
          type: integer
          description: Taxa cobrada
          em centavos.: null
        netAmountCents:
          type: integer
          description: amountCents - feeCents. Valor creditado no saldo quando pago.
        provider:
          type: string
          description: Provedor Pix que processou a cobrança.
        providerPaymentId:
          type:
            - string
            - 'null'
        publicToken:
          type: string
          description: Token usado no link de checkout público.
        idempotencyKey:
          type: string
          description: 'Uso interno: a Idempotency-Key enviada na criação.'
        externalReference:
          type:
            - string
            - 'null'
        description:
          type:
            - string
            - 'null'
        customer:
          type:
            - object
            - 'null'
          properties:
            name:
              type: string
            email:
              type: string
            externalId:
              type: string
        pixBrCode:
          type:
            - string
            - 'null'
          description: Código "Pix Copia e Cola".
        pixQrCodeImage:
          type:
            - string
            - 'null'
          description: Imagem do QR Code
          em base64.: null
        feeSnapshot:
          type: object
          description: 'Uso interno: perfil de tarifa aplicado no momento da criação.'
        metadata:
          type: object
          description: Uso interno.
        expiresAt:
          type:
            - string
            - 'null'
          format: date-time
        paidAt:
          type:
            - string
            - 'null'
          format: date-time
        cancelledAt:
          type:
            - string
            - 'null'
          format: date-time
        nextReconciliationAt:
          type:
            - string
            - 'null'
          format: date-time
          description: Uso interno.
        reconciliationAttempts:
          type: integer
          description: Uso interno.
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    ErrorEnvelope:
      type: object
      required:
        - error
      properties:
        error:
          type: object
          required:
            - code
            - message
            - requestId
          properties:
            code:
              type: string
              example: ACCOUNT_NOT_VERIFIED
            message:
              type: string
            fields:
              type: object
              additionalProperties:
                type: array
                items:
                  type: string
            requestId:
              type: string
  responses:
    BadRequest:
      description: Requisição inválida (ex. cabeçalho `Idempotency-Key` ausente)
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
    Unauthorized:
      description: Chave de API ausente, inválida, revogada ou expirada
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
    Forbidden:
      description: Conta não verificada, ou a chave não tem o escopo necessário
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
    Conflict:
      description: Conflito de idempotência ou de estado
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
    ValidationError:
      description: Corpo da requisição não passou na validação
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
  securitySchemes:
    apiKeyAuth:
      type: http
      scheme: bearer
      bearerFormat: zpk_live_...
      description: Chave de API criada em Integrações → Chaves de API no painel.

````