Enviar pedido de devolução
O pagamento só pode ser devolvido se tiver no estado Confirmado.
Pode consultar o estado do pagamento no endpoint:
GET /payments/{id}
Tipos de Devolução
- Devolução total
- Devolução parcial
1. Iniciação da Devolução (via API)
O seu sistema inicia a devolução remotamente através da API PayPay:
Fluxo:
- Sistema envia pedido para API PayPay:
Endpoint
POST /terminals/{uuid}/refunds/{paymentId}
Exemplo básico
{
"amount": 100,
}
Parâmetros
Parâmetro | Tipo | Obrigatório | Descrição |
---|---|---|---|
uuid | string | ✅ Sim | UUID do terminal para o qual irá ser enviado o pedido de pagamento |
paymentId | string | ✅ Sim | ID do pagamento PayPay que deseja devolver |
amount | integer | ✅ Sim | Montante que deseja devovler |
- API PayPay comunica com o terminal de forma assíncrona
- Terminal recebe e apresenta o valor automaticamente ao operador
O terminal aguarda 1 minuto pela apresentação do cartão.
- API PayPay devolve a resposta do sucesso ou não do pedido assíncrono, enquanto o terminal aguarda pela apresentação do cartão.
Resposta da API
{
"date": "2025-09-01T12:46:22+01:00",
"success": true,
"data": {
"id": "3",
"clientId": "502056800",
"type": "refund",
"amount": 50,
"initialPaymentId": "1",
"stateDetails": {
"state": "pending_confirmation",
"createdAt": "2025-09-01T12:46:22+01:00"
},
"paymentMethod": {
"code": "CC",
"type": "TPA",
"details": {
"brand": "VISA",
"last4Digits": "7193"
}
},
"availableMethods": [
{
"code": "CC",
"type": "TPA",
"name": "Credit Debit card Physical TPA"
}
],
"bankAccount": {
"code": "O9uFVmSZ",
"bankName": "Banco",
"last4digits": "8513"
},
"createdAt": "2025-09-01T12:46:22+01:00",
"updatedAt": "2025-09-01T12:46:22+01:00"
}
}
Estrutura da Resposta
Campo | Tipo | Descrição |
---|---|---|
id | string | ID da devolução PayPay |
clientId | string | NIF da entidade a que o pagamento ficou associado |
type | string | Tipo de operação |
stateDetails.state | string | Estado do pagamento |
stateDetails.createdAt | datetime | Date do estado |
paymentMethod | object | Método de pagamento do pagamento original |
availableMethods | object | Formas de pagamento disponíveis para a devolução |
bankAccount | object | Identificação do banco que irá receber os fundos |
createdAt | datetime | Data de criação do registo |
updatedAt | datetime | Data da última atualização |
Fluxo de devolução no terminal
Após o pedido de devolução ser enviado pela API, o processo no terminal segue estes passos:
2. Apresentação do Cartão
O cliente apresenta o mesmo cartão usado no pagamento original:
Fluxo:
- Terminal apresenta o valor da devolução ao operador
- Cliente apresenta o cartão através de um dos métodos:
- Contactless: Aproxima cartão ou dispositivo móvel
- Chip: Insere cartão no terminal
- Banda magnética: Passa o cartão
- Terminal valida se o cartão corresponde ao pagamento original
O cartão deve ser o mesmo utilizado no pagamento original. Se for apresentado um cartão diferente, a devolução será recusada.
3. Autenticação
Dependendo do valor e tipo de cartão, pode ser necessária autenticação:
Fluxo:
- Dados do cartão são lidos e validados pelo terminal
- Sistema verifica se autenticação é necessária:
- Se sim: Cliente introduz PIN
- Se PIN correto: Prossegue para processamento
- Se PIN incorreto: Nova tentativa ou cancelamento (máx. 3 tentativas)
- Se não: Processamento direto para autorização
- Se sim: Cliente introduz PIN
Tipos de autenticação:
- PIN: Normalmente requerido para devoluções
- Sem autenticação: Em alguns casos de valores reduzidos
4. Processamento e Confirmação
O terminal comunica com a rede de pagamentos para processar a devolução:
Fluxo:
- Terminal valida dados e envia pedido para rede de pagamento
- Rede contacta banco emissor para processar devolução
- Resposta é enviada de volta ao terminal:
- Aprovada: Devolução processada com sucesso
- Recusada: Mensagem de erro apresentada
5. Notificação ao Sistema
Após a confirmação, o seu sistema é notificado:
Fluxo:
- Transação é sincronizada com backoffice PayPay em tempo real
- A PayPay notifica via Webhook o seu sistema com detalhes da devolução
Configure webhooks para receber notificações automáticas do resultado da devolução. A resposta da API indica apenas que o pedido foi enviado ao terminal, não o resultado final.