Fazer uma venda no PIX

Cria uma cobrança PIX em cima de uma oferta existente. O método de pagamento é definido pela própria rota, então não é preciso enviar payment_method no corpo.

O header Idempotency-Key é obrigatório. Em caso de timeout, reenvie a requisição com a mesma chave: a resposta original será devolvida sem gerar uma segunda cobrança.

A resposta desta rota traz o PIX gerado (pix.qr_code), não o pago. A confirmação do pagamento acontece de forma assíncrona — assine o webhook TRANSACTION_PAID para ser notificado assim que o PIX for pago, ou consulte GET /sales/{identifier} usando o transactions[0] da resposta para checar o status a qualquer momento.

Esta rota não cria assinaturas: mesmo apontando para uma oferta recorrente, o resultado é sempre uma cobrança avulsa (subscriptions sempre vem vazio na resposta).

Sem campo de autorização: o portal autentica por você com a sua chave de Homologação e as requisições rodam só no ambiente de testes.

POST
/payments/pix
AuthorizationBearer <token>

Token de acesso devolvido por POST /auth/token. Envie como "Authorization: Bearer ". Vale 24 horas.

In: header

Header Parameters

Idempotency-Keystring
Lengthlength <= 255
offer_identifier?string

Código de uma oferta existente. Envie este campo ou offer — nunca os dois.

offer?object

Oferta informada na hora. Envie este objeto ou offer_identifier — nunca os dois. Reaproveita a oferta com mesmo produto, nome, valor e visibilidade; senão cria.

quantity?integer
Default1
Range1 <= value
affiliate_identifier?string

Código do afiliado que trouxe a venda, no formato PAO seguido de 10 dígitos. Formato inválido retorna 400. Código de afiliado inexistente, de outro produto, inativo ou sem a oferta liberada é ignorado: a venda é processada normalmente, sem afiliado. Não há cookie nem regra de primeiro ou último clique — vale o código enviado.

Match^PAO[0-9]{10}$
external_reference?string

Referência do pedido no seu sistema (por exemplo, o número do pedido). Opcional. Depois você consulta a venda por ela em GET /sales/{identifier} e filtra em GET /sales?external_reference=. Pode se repetir entre pedidos: a consulta devolve a venda mais recente com essa referência.

Lengthlength <= 255
customerobject
address?object

Obrigatório quando a oferta é de produto físico (requires_shipping: true); nos demais casos é opcional e não é usado no processamento da venda.

shipping_option_id?string

Opção de frete escolhida, obrigatória quando a oferta é de produto físico (requires_shipping: true). Use o id devolvido por GET /offers/{identifier}/shipping para o mesmo CEP enviado em address.postal_code. Enviar este campo numa oferta que não exige frete retorna 400.

buyer_ip?string

IP do comprador final. Melhora a análise antifraude.

buyer_user_agent?string

User agent do comprador final.

Response Body

curl -X POST "https://pagpolar-api.creativecode.dev.br/v1/payments/pix" \  -H "Idempotency-Key: string" \  -H "Content-Type: application/json" \  -d '{    "offer_identifier": "PPP1234567890",    "customer": {      "name": "Fulano de Tal",      "email": "fulano@exemplo.com",      "document": "12345678909",      "phone": "11999999999"    },    "buyer_ip": "203.0.113.10"  }'

{
  "data": {
    "offer_identifier": "PPP1234567890",
    "transactions": [
      "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d"
    ],
    "subscriptions": [],
    "pix": {
      "qr_code": "00020126..."
    }
  }
}
{
  "error": {
    "code": "invalid_request",
    "message": "string",
    "request_id": "string"
  }
}
{
  "error": {
    "code": "invalid_request",
    "message": "string",
    "request_id": "string"
  }
}
{
  "error": {
    "code": "invalid_request",
    "message": "string",
    "request_id": "string"
  }
}
{
  "error": {
    "code": "invalid_request",
    "message": "string",
    "request_id": "string"
  }
}
{
  "error": {
    "code": "invalid_request",
    "message": "string",
    "request_id": "string"
  }
}
{
  "error": {
    "code": "invalid_request",
    "message": "string",
    "request_id": "string"
  }
}
{
  "error": {
    "code": "invalid_request",
    "message": "string",
    "request_id": "string"
  }
}