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

# Solicitar um saque

> Solicita um saque Pix do saldo disponível da conta. O valor é reservado imediatamente e o saque segue para a mesma fila de análise manual usada pelo painel — não é liberado automaticamente. Exige o escopo `pix:withdraw`.

Sem o campo `pixKey`, o saque usa a chave Pix de saque cadastrada em **Configurações → Chave Pix de saque**. O valor é validado contra os limites por saque, diário e noturno da conta.


> [!NOTE]
>
> Exige uma chave de API com o escopo `pix:withdraw`. Esse escopo move dinheiro pra fora da conta — conceda ele só a integrações que realmente precisam automatizar saque, e guarde a chave com o mesmo cuidado de uma senha.

> [!WARNING]
>
> O cabeçalho `Idempotency-Key` é obrigatório. Reenviar a mesma chave com o mesmo corpo retorna o saque já criado, sem duplicar; reenviar com um corpo diferente retorna `409 IDEMPOTENCY_KEY_REUSED`.

Sem `pixKey` no corpo, o saque usa a chave Pix de saque cadastrada em **Configurações → Chave Pix de saque**. O valor é validado contra os mesmos limites (por saque, diário e noturno) e a mesma regra de conta verificada que valem pro saque feito pelo painel — ver [Como sacar](https://docs.zynpay.com.br/saques/como-sacar.md).

```bash theme={null}
curl https://api.zynpay.com.br/v1/public/pix/withdrawals \
  -X POST \
  -H "Authorization: Bearer zpk_live_..." \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"amountCents": 50000}'
```

O valor é **reservado imediatamente** do saldo disponível assim que o pedido é criado, e segue para a mesma fila de análise manual que os saques pedidos pelo painel — não é liberado automaticamente. Acompanhe o status com [`GET /v1/public/pix/withdrawals`](https://docs.zynpay.com.br/api/listar-saques) ou assine o webhook `withdrawal.paid` / `withdrawal.rejected`.


## OpenAPI

````yaml POST /v1/public/pix/withdrawals
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: Saques
    description: Solicitar e consultar saques Pix
  - name: Saldo
    description: Consultar o saldo da conta
paths:
  /v1/public/pix/withdrawals:
    post:
      tags:
        - Saques
      summary: Solicitar um saque
      description: >
        Solicita um saque Pix do saldo disponível da conta. O valor é reservado
        imediatamente e o saque segue para a mesma fila de análise manual usada
        pelo painel — não é liberado automaticamente. Exige o escopo
        `pix:withdraw`.


        Sem o campo `pixKey`, o saque usa a chave Pix de saque cadastrada em
        **Configurações → Chave Pix de saque**. O valor é validado contra os
        limites por saque, diário e noturno da conta.
      operationId: createWithdrawal
      parameters:
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateWithdrawalRequest'
      responses:
        '200':
          description: >-
            Mesma `Idempotency-Key` reenviada com o mesmo corpo — devolve o
            saque já criado, sem duplicar
          content:
            application/json:
              schema:
                type: object
                properties:
                  withdrawal:
                    $ref: '#/components/schemas/Withdrawal'
        '201':
          description: Saque solicitado e valor reservado do saldo disponível
          content:
            application/json:
              schema:
                type: object
                properties:
                  withdrawal:
                    $ref: '#/components/schemas/Withdrawal'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '409':
          description: >-
            Idempotency-Key reenviada com um corpo diferente, ou saques pausados
            pela plataforma (`PAYOUTS_PAUSED`)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '422':
          description: >-
            Valor acima do limite por saque/diário/noturno, valor menor que a
            taxa de saque, ou nenhuma chave Pix de saque disponível
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
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:
    CreateWithdrawalRequest:
      type: object
      required:
        - amountCents
      properties:
        amountCents:
          type: integer
          minimum: 100
          description: Valor do saque em centavos, antes da taxa de saque.
          example: 50000
        pixKey:
          type: string
          minLength: 3
          maxLength: 160
          description: >-
            Chave Pix de destino. Se omitida, usa a chave Pix de saque
            cadastrada na conta.
          example: '12345678909'
    Withdrawal:
      type: object
      required:
        - id
        - status
        - amountCents
        - feeCents
        - netAmountCents
        - createdAt
      properties:
        id:
          type: string
          format: uuid
          description: ID único do saque na ZynPay.
        status:
          type: string
          enum:
            - requested
            - under_review
            - approved
            - paid
            - rejected
            - cancelled
          description: |
            `requested` — aguardando análise.
            `under_review` — em análise manual.
            `approved` — aprovado, aguardando envio do Pix.
            `paid` — Pix enviado ao destinatário.
            `rejected` — recusado (veja `reason`).
            `cancelled` — cancelado.
        amountCents:
          type: integer
          description: Valor bruto solicitado
          em centavos.: null
        feeCents:
          type: integer
          description: Taxa de saque
          em centavos.: null
        netAmountCents:
          type: integer
          description: amountCents - feeCents. Valor efetivamente enviado ao destinatário.
        reason:
          type:
            - string
            - 'null'
          description: Motivo informado quando o saque é rejeitado ou cancelado.
        createdAt:
          type: string
          format: date-time
        paidAt:
          type:
            - string
            - 'null'
          format: date-time
          description: Preenchido quando o status muda para `paid`.
    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'
  securitySchemes:
    apiKeyAuth:
      type: http
      scheme: bearer
      bearerFormat: zpk_live_...
      description: Chave de API criada em Integrações → Chaves de API no painel.

````

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