# Pagar Pix copia e cola (/docs/conta-digital/endpoints/pix/post_pix_qr_payment)

## POST /transactions/pix/qr-payments

`POST https://api.hub.payzu.com.br/api/v1/transactions/pix/qr-payments`

Escopo: `WITHDRAW`. Paga um Pix copia e cola, estático ou dinâmico, com o saldo disponível da conta. Funciona como um saque: mesma resposta, mesmos limites, teto diário e limite de requisições, com a tarifa de pagamento de Pix copia e cola (`externalPayment` em limites). A `Idempotency-Key` também compara o código pago. Acompanhe pelos webhooks `WITHDRAW_*` e pela consulta de saque, com `operation: EXTERNAL_PAYMENT`.

### Header params

| Field | Type | Required | Details |
| --- | --- | --- | --- |
| `Idempotency-Key` | string | no | Valor único por operação, de 1 a 255 caracteres ASCII visíveis, sem espaço. Repetir a chave com o mesmo valor e destino devolve a operação original; com outro valor ou destino, `409`. Vale por conta, sem expiração. — minLength: 1; maxLength: 255 |

### Body params

| Field | Type | Required | Details |
| --- | --- | --- | --- |
| `brCode` | string | yes | Pix copia e cola, completo, como foi lido. — minLength: 8; maxLength: 1024 |
| `amount` | integer | no | Valor a pagar, quando o código não traz valor. Se traz, deve ser igual ao do código. Em centavos. |
| `comment` | string | no | Texto enviado ao destinatário. Sem ele, vai o nome do destinatário que está no código. — maxLength: 140 |
| `callbackUrl` | string | no | URL HTTPS pública que recebe todos os webhooks desta operação, além dos endpoints cadastrados. Até 2048 caracteres. Exige o segredo de callback da conta. — format: uri; maxLength: 2048 |

### Responses

**201** Pagamento registrado.

| Field | Type | Required | Details |
| --- | --- | --- | --- |
| `id` | string | yes | Identificador do saque. A consulta aceita este `id` e o `withdrawId` dos webhooks. |
| `status` | string | yes | `REQUESTED`: pedido feito; o valor já saiu do saldo disponível. `CREATED`: registrado no banco. `APPROVED`: aprovado, a caminho. `CONFIRMED`: o dinheiro chegou. `FAILED`: não saiu, e o valor voltou ao saldo; pode vir de `REQUESTED`, `CREATED` ou `APPROVED`. — `REQUESTED`, `CREATED`, `APPROVED`, `CONFIRMED`, `FAILED` |
| `amount` | integer | yes | Valor que chega ao destino. Em centavos. |
| `serviceFee` | integer | yes | Tarifa, somada por cima. Em centavos. |
| `totalDebited` | integer | yes | `amount + serviceFee`: o que sai da conta. Em centavos. |
| `pixKey` | string | yes | Chave de destino. No saque, a chave enviada, normalizada; no pagamento de Pix copia e cola, mascarada (CPF, e-mail e telefone saem mascarados; CNPJ e chave aleatória, legíveis.) |
| `comment` | string | null | yes | Texto enviado ao destinatário. |
| `e2e` | string | null | yes | End-to-end do Pix. `null` até o banco registrar. |
| `providerRejectedReason` | string | null | yes | Mensagem pronta para exibir, preenchida quando o banco recusou. |
| `callbackUrl` | string | null | yes | A `callbackUrl` enviada na criação. `null` quando não foi enviada. |
| `createdAt` | string | yes | Data e hora em ISO 8601, UTC. — format: date-time |
| `sentAt` | string | null | yes | Quando o banco registrou o saque. — format: date-time |
| `approvedAt` | string | null | yes | Quando o banco aprovou o saque. — format: date-time |
| `confirmedAt` | string | null | yes | Quando o dinheiro chegou ao destino. — format: date-time |

**400** Requisição inválida.

| Field | Type | Required | Details |
| --- | --- | --- | --- |
| `message` | string | yes | Descrição em português, pronta para exibir. Pode mudar a qualquer momento. |
| `code` | string | yes | Código estável do erro. É por ele que o seu sistema decide o que fazer. |
| `details` | object | no | Contexto estruturado do erro, quando existe. |

**401** Credencial ausente, inválida ou expirada.

| Field | Type | Required | Details |
| --- | --- | --- | --- |
| `message` | string | yes | Descrição em português, pronta para exibir. Pode mudar a qualquer momento. |
| `code` | string | yes | Código estável do erro. É por ele que o seu sistema decide o que fazer. |
| `details` | object | no | Contexto estruturado do erro, quando existe. |

**403** Sem permissão: escopo, IP ou operação desabilitada.

| Field | Type | Required | Details |
| --- | --- | --- | --- |
| `message` | string | yes | Descrição em português, pronta para exibir. Pode mudar a qualquer momento. |
| `code` | string | yes | Código estável do erro. É por ele que o seu sistema decide o que fazer. |
| `details` | object | no | Contexto estruturado do erro, quando existe. |

**404** Não encontrado, ou de outra conta.

| Field | Type | Required | Details |
| --- | --- | --- | --- |
| `message` | string | yes | Descrição em português, pronta para exibir. Pode mudar a qualquer momento. |
| `code` | string | yes | Código estável do erro. É por ele que o seu sistema decide o que fazer. |
| `details` | object | no | Contexto estruturado do erro, quando existe. |

**409** Conflito com o estado atual.

| Field | Type | Required | Details |
| --- | --- | --- | --- |
| `message` | string | yes | Descrição em português, pronta para exibir. Pode mudar a qualquer momento. |
| `code` | string | yes | Código estável do erro. É por ele que o seu sistema decide o que fazer. |
| `details` | object | no | Contexto estruturado do erro, quando existe. |

**412** Falta um passo antes desta operação.

| Field | Type | Required | Details |
| --- | --- | --- | --- |
| `message` | string | yes | Descrição em português, pronta para exibir. Pode mudar a qualquer momento. |
| `code` | string | yes | Código estável do erro. É por ele que o seu sistema decide o que fazer. |
| `details` | object | no | Contexto estruturado do erro, quando existe. |

**422** Recusa de regra de negócio.

| Field | Type | Required | Details |
| --- | --- | --- | --- |
| `message` | string | yes | Descrição em português, pronta para exibir. Pode mudar a qualquer momento. |
| `code` | string | yes | Código estável do erro. É por ele que o seu sistema decide o que fazer. |
| `details` | object | no | Contexto estruturado do erro, quando existe. |

**429** Limite de requisições excedido.

| Field | Type | Required | Details |
| --- | --- | --- | --- |
| `message` | string | yes | Descrição em português, pronta para exibir. Pode mudar a qualquer momento. |
| `code` | string | yes | Código estável do erro. É por ele que o seu sistema decide o que fazer. |
| `details` | object | no | Contexto estruturado do erro, quando existe. |

**502** O banco não respondeu ou recusou.

| Field | Type | Required | Details |
| --- | --- | --- | --- |
| `message` | string | yes | Descrição em português, pronta para exibir. Pode mudar a qualquer momento. |
| `code` | string | yes | Código estável do erro. É por ele que o seu sistema decide o que fazer. |
| `details` | object | no | Contexto estruturado do erro, quando existe. |

**503** Serviço de consulta ou limitador indisponível; nada foi feito.

| Field | Type | Required | Details |
| --- | --- | --- | --- |
| `message` | string | yes | Descrição em português, pronta para exibir. Pode mudar a qualquer momento. |
| `code` | string | yes | Código estável do erro. É por ele que o seu sistema decide o que fazer. |
| `details` | object | no | Contexto estruturado do erro, quando existe. |